批量文件名修改

来源:互联网 发布:成都c语言编程培训班 编辑:程序博客网 时间:2024/04/28 21:19

修改: http://blog.csdn.net/jiangredsheep/archive/2005/07/19/429302.aspx 的目录操作,改为文件名批量修改。

如果想保留原来的文件,可以采用copyFile函数,如下代码:

 

#include <iostream>
#include 
<string>
#include 
<string.h>
#include 
<string>
#include 
<afx.h>

using namespace std;

char* GetAnsicString(const CString &s)
{
    
int nSize = (s.GetLength() + 1)*sizeof(TCHAR);
    
//char *pAnsicString = new char[nSize];
    char * pAnsicString = (char *)malloc(nSize*sizeof(char));
    ZeroMemory(pAnsicString, nSize);
    wcstombs(pAnsicString, s, nSize);
    
return pAnsicString;
}
 

void Recurse(LPCTSTR pstr)
{
    CFileFind finder;
    HANDLE hSearch;
    DWORD dwAttrs;
    TCHAR szDirPath[] 
= TEXT("C:/Documents and Settings/null/Desktop/fadg0/video/");
    TCHAR szNewPath[MAX_PATH];

    BOOL fFinished 
= FALSE;




    
// build a string with wildcards
    CString strWildcard(pstr);
    strWildcard 
+= _T("/*.*");

    
// start working for files
    BOOL bWorking = finder.FindFile(strWildcard);
    CString src,dst,filetitle,filename;
    
int result;

    
while (bWorking)
    
{
        bWorking 
= finder.FindNextFile();



        
// skip . and .. files; otherwise, we'd
        
// recur infinitely!

        
if (finder.IsDots())
            
continue;

        
// if it's a directory, recursively search it

        
if (finder.IsDirectory())
        
{
            CString str 
= finder.GetFilePath();
            cout 
<< (LPCTSTR) str << endl;
            Recurse(str);
            
continue;

        }


        src 
= finder.GetRoot();
        filetitle 
= finder.GetFileTitle();
        filename 
= finder.GetFileName();
        
if (filename != filetitle)
            
continue;
        src 
= src + _T("/"+ filetitle;
        dst 
= src + _T(".jpg");

        
//采用重命名部分
        char * asicsrc = GetAnsicString(src); 
        
char * asicdst = GetAnsicString(dst);


        result 
= rename(asicsrc,asicdst);
        
if (result == 0 )
            puts ( 
"File successfully renamed" );
        
else
            perror( 
"Error renaming file" );
        free(asicdst);
        free(asicsrc);

        
// 采用拷贝部分
        
//if (CopyFile(src, dst, FALSE))
        
//{
        
//    dwAttrs = GetFileAttributes(src);
        
//    if (dwAttrs==INVALID_FILE_ATTRIBUTES) 
        
//        return;

        
//    if (!(dwAttrs & FILE_ATTRIBUTE_READONLY))
        
//    {
        
//        SetFileAttributes(dst,
        
//            dwAttrs | FILE_ATTRIBUTE_READONLY);
        
//    }
        
//}
        
//else
        
//{
        
//    printf("Could not copy file. ");
        
//    return;
        
//}

    }

    finder.Close();
    
}


int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       
int       nCmdShow)
{
    Recurse(_T(
"C:/Documents and Settings/null/Desktop/fadg0/video/"));
}

 

如果不需要保留,可以直接采用rename函数实现。

原创粉丝点击