Solved

find and delete files

Posted on 2002-07-15
20
260 Views
Last Modified: 2013-12-03
Hey,

I need a quick and easy app to go looking for all files with a .dot extension and delete them.

If I can back them up to a directory first then all the better but I'd be happy just to zap the wee beggers.

Cheers
0
Comment
Question by:jgreig100
20 Comments
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7153746
If you need a Windows program that delete the file and counts how many delted, then here it is

ULONG SmartDeleteFile(char* pstrExtn, char *pstrFolderPath, char *pstrFindFile,  bool blnSubFolder)
{
     WIN32_FIND_DATA Win32FindData;
     HFILE hFindFile;
     bool blnFind = true;
     char strFileName[260];
     ULONG ulFileCount = 0;
     char strFolderPath[260];

     strcpy(strFolderPath, pstrFolderPath);
     int strLen = strlen(strFolderPath);

     if ( strFolderPath[strLen - 1] !=  '\\' )
     strcat(strFolderPath, "\\");

     char strWild[260];
     sprintf(strWild, "%s*.%s", strFolderPath, pstrExtn);


     ZeroMemory(&Win32FindData, sizeof(Win32FindData));
     hFindFile = (HFILE)FindFirstFile(strWild, &Win32FindData);

     while ( blnFind )
     {
          strcpy(strFileName, Win32FindData.cFileName);

          if ( strcmp(strFileName, ".") && strcmp(strFileName, "..") )
          {
               if ( Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
               {
                    if ( blnSubFolder )
                    {
                         char strTmp[260];
                         sprintf(strTmp, "%s%s\\", strFolderPath, strFileName);
                         ulFileCount += SmartDeleteFile(pstrExtn, strTmp, pstrFindFile, blnSubFolder);
                    }
               }
               else
               {
                    if ( !strcmpi(strFileName, pstrFindFile) )
                         ulFileCount++;
               }    
          }

          blnFind = FindNextFile((void*)hFindFile, &Win32FindData);
     }


     FindClose((void *)hFindFile);

     return ulFileCount;
}


Good Luck
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7153752
Sorry, one statement missing in the prev.

ULONG SmartDeleteFile(char* pstrExtn, char *pstrFolderPath, char *pstrFindFile,  bool blnSubFolder)
{
     WIN32_FIND_DATA Win32FindData;
     HFILE hFindFile;
     bool blnFind = true;
     char strFileName[260];
     ULONG ulFileCount = 0;
     char strFolderPath[260];

     strcpy(strFolderPath, pstrFolderPath);
     int strLen = strlen(strFolderPath);

     if ( strFolderPath[strLen - 1] !=  '\\' )
     strcat(strFolderPath, "\\");

     char strWild[260];
     sprintf(strWild, "%s*.%s", strFolderPath, pstrExtn);


     ZeroMemory(&Win32FindData, sizeof(Win32FindData));
     hFindFile = (HFILE)FindFirstFile(strWild, &Win32FindData);

     while ( blnFind )
     {
          strcpy(strFileName, Win32FindData.cFileName);

          if ( strcmp(strFileName, ".") && strcmp(strFileName, "..") )
          {
               if ( Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
               {
                    if ( blnSubFolder )
                    {
                         char strTmp[260];
                         sprintf(strTmp, "%s%s\\", strFolderPath, strFileName);
                         ulFileCount += SmartDeleteFile(pstrExtn, strTmp, pstrFindFile, blnSubFolder);
                    }
               }
               else
               {
                    if ( !strcmpi(strFileName, pstrFindFile) )
                    {
                         ulFileCount++;
                         DeleteFile(strFileName);
                    }
               }    
          }

          blnFind = FindNextFile((void*)hFindFile, &Win32FindData);
     }


     FindClose((void *)hFindFile);

     return ulFileCount;
}
0
 

Author Comment

by:jgreig100
ID: 7153879
sorry to sound a bit dim, but how do I use this?  Where do I compile it etc. and what's my syntax to run it?

spot the beginner to windows programming.

cheers
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7153888
Do you have VC++ 6.0 ?

Or you need just only an EXE ?

Roshmon

0
 
LVL 2

Expert Comment

by:alcindor
ID: 7154109
This is not a windows programming solution as such but why don't you use the command line tool Xcopy ? This will move your files to another location. You can make a batch file or .cmd file to run the routine for you. This will be ok if you  intend to run the "program" manually.
What do you think ?

Roger
0
 

Author Comment

by:jgreig100
ID: 7154298

Thanks but I need to find the files first as I'm not sure where they are and this can change from one user to the next over 200 - 300 computers.

Roshmon : I do have VC++ 6.0 but when I compile to .exe it gives the msg

Compiling...
test.cpp
d:\temp\test.cpp(1) : error C2146: syntax error : missing ';' before identifier 'SmartDeleteFile'
d:\temp\test.cpp(1) : error C2501: 'ULONG' : missing storage-class or type specifiers
d:\temp\test.cpp(1) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

test.exe - 3 error(s), 0 warning(s)

I'm not a C programmer...Java aye, but C no, so I'm not used to the editor and compiling bit.

Thanks man
0
 

Author Comment

by:jgreig100
ID: 7154299

Thanks but I need to find the files first as I'm not sure where they are and this can change from one user to the next over 200 - 300 computers.

Roshmon : I do have VC++ 6.0 but when I compile to .exe it gives the msg

Compiling...
test.cpp
d:\temp\test.cpp(1) : error C2146: syntax error : missing ';' before identifier 'SmartDeleteFile'
d:\temp\test.cpp(1) : error C2501: 'ULONG' : missing storage-class or type specifiers
d:\temp\test.cpp(1) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

test.exe - 3 error(s), 0 warning(s)

I'm not a C programmer...Java aye, but C no, so I'm not used to the editor and compiling bit.

Thanks man
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156180
1. Put
     unsigned long SmartDeleteFile(char* pstrExtn, char *pstrFolderPath, bool blnSubFolder)
     on the top of the cpp file(after all # includes)

2. If you want to delete files with extension .dat, you can call this functio with

     SmartDeleteFile("dat", "C:\\TEMP\\", true);

3. For solving fatal error - take Project->Settings->
     Select C++ tab
     Select Procompiled headers combo value
     Select the radio button "Not using precompiled headers"

     Here is the modified function



unsigned long SmartDeleteFile(char* pstrExtn, char *pstrFolderPath, bool blnSubFolder)
{
    WIN32_FIND_DATA Win32FindData;
    HFILE hFindFile;
    bool blnFind = true;
    char strFileName[260];
    ULONG ulFileCount = 0;
    char strFolderPath[260];

    strcpy(strFolderPath, pstrFolderPath);
    int strLen = strlen(strFolderPath);

    if ( strFolderPath[strLen - 1] !=  '\\' )
    strcat(strFolderPath, "\\");

    char strWild[260];
    sprintf(strWild, "%s*.%s", strFolderPath, pstrExtn);


    ZeroMemory(&Win32FindData, sizeof(Win32FindData));
    hFindFile = (HFILE)FindFirstFile(strWild, &Win32FindData);

    while ( blnFind )
    {
         strcpy(strFileName, Win32FindData.cFileName);

         if ( strcmp(strFileName, ".") && strcmp(strFileName, "..") )
         {
              if ( Win32FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
              {
                   if ( blnSubFolder )
                   {
                        char strTmp[260];
                        sprintf(strTmp, "%s%s\\", strFolderPath, strFileName);
                        ulFileCount += SmartDeleteFile(pstrExtn, strTmp, blnSubFolder);
                   }
              }
              else
              {
                   ulFileCount++;
                   DeleteFile(strFileName);
              }    
         }

         blnFind = FindNextFile((void*)hFindFile, &Win32FindData);
    }

    FindClose((void *)hFindFile);

    return ulFileCount;
}
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156183
change all ULONG to "unsigned long"
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:jgreig100
ID: 7156566
Hey, looking better but now I get a whole raft of errors because I don't have things in my #includes...

What should I be including and should the file only have one class?  Like I said, a real C++ virgin.

cheers
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156590
Please specify the errors

>> What should I be including and should the file only have one class


includes are needed if some APIs are used and its declarations are in that included files

0
 

Author Comment

by:jgreig100
ID: 7156612
Hey, looking better but now I get a whole raft of errors because I don't have things in my #includes...

What should I be including and should the file only have one class?  Like I said, a real C++ virgin.

cheers
0
 

Author Comment

by:jgreig100
ID: 7156617
ooops, double posting.  damn refresh is too tempting...

Aye,

Here goes:

FindFile.cpp
d:\work\findfile\c++\findfile.cpp(7) : error C2065: 'SmartDeleteFile' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(14) : error C2373: 'SmartDeleteFile' : redefinition; different type modifiers
d:\work\findfile\c++\findfile.cpp(15) : error C2065: 'WIN32_FIND_DATA' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(15) : error C2146: syntax error : missing ';' before identifier 'Win32FindData'
d:\work\findfile\c++\findfile.cpp(15) : error C2065: 'Win32FindData' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(16) : error C2065: 'HFILE' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(16) : error C2146: syntax error : missing ';' before identifier 'hFindFile'
d:\work\findfile\c++\findfile.cpp(16) : error C2065: 'hFindFile' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(22) : error C2065: 'strcpy' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(23) : error C2065: 'strlen' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(26) : error C2065: 'strcat' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(32) : error C2065: 'ZeroMemory' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(33) : error C2146: syntax error : missing ';' before identifier 'FindFirstFile'
d:\work\findfile\c++\findfile.cpp(33) : error C2065: 'FindFirstFile' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(37) : error C2228: left of '.cFileName' must have class/struct/union type
d:\work\findfile\c++\findfile.cpp(39) : error C2065: 'strcmp' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(41) : error C2228: left of '.dwFileAttributes' must have class/struct/union type
d:\work\findfile\c++\findfile.cpp(41) : error C2065: 'FILE_ATTRIBUTE_DIRECTORY' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(53) : error C2065: 'DeleteFile' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(57) : error C2065: 'FindNextFile' : undeclared identifier
d:\work\findfile\c++\findfile.cpp(57) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\work\findfile\c++\findfile.cpp(60) : error C2065: 'FindClose' : undeclared identifier
Error executing cl.exe.

FindFile.exe - 21 error(s), 1 warning(s)

> By one class I mean, did I have to compile this to a class and access it with another?  I was probably talking nonsense: It was late on a Monday after a busy weekend man.

cheers
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156618
Please specify the errors
0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156624
#include <windows.h>
#include <string.h>
0
 

Author Comment

by:jgreig100
ID: 7156632
oh my god, and with one fell swoop, 20 errors vanish just like that...1 more though:

d:\work\findfile\c++\findfile.cpp(29) : error C2065: 'sprintf' : undeclared identifier

0
 
LVL 23

Expert Comment

by:Roshan Davis
ID: 7156642
#include <windows.h>
#include <string.h>
0
 
LVL 8

Expert Comment

by:fl0yd
ID: 7158200
#include <stdio.h>

this is where sprintf() is declared.
0
 
LVL 23

Accepted Solution

by:
Roshan Davis earned 200 total points
ID: 7158666
Is it working now?
Roshmon
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Method 'OpenReport' of the object Docmd failed 7 28
Nest Related files not working in Visual Studio 4 76
Windows Installer 4 69
Is COM supported from Apache 1 44
zlib is a free compression library (a DLL) on which the popular gzip utility is built.  In this article, we'll see how to use the zlib functions to compress and decompress data in memory; that is, without needing to use a temporary file.  We'll be c…
What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now