修改: 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/"));
}
#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函数实现。