怎么把一个文件夹中的所有内容拷到另一个目录下? CopyFile只能拷单个文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 system(“xpocy”),记不清了 http://topic.csdn.net/u/20090422/16/e895de1c-baf8-43ef-b0a8-01915a36e649.html8楼 long fileSize = 0;void ReadFile( wchar_t* wcPathName){ wchar_t path[MAX_PATH]; wchar_t pathTemp[MAX_PATH]; wchar_t pathUse[MAX_PATH]; wcscpy( pathTemp,wcPathName ); wcscat( pathTemp,L"\\" ); WIN32_FIND_DATAW FindFileData; HANDLE hFind; wcscpy( path,pathTemp ); wcscat( path,L"*.*" ); hFind = ::FindFirstFileW( path, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { return; }else { if ( wcscmp(FindFileData.cFileName,L".") != 0 && wcscmp(FindFileData.cFileName,L"..") != 0 && !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果不是 . ..,也不是文件夾(是文件) { wcscpy( pathUse,pathTemp ); wcscat( pathUse,FindFileData.cFileName ); HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle != INVALID_HANDLE_VALUE) { fileSize += GetFileSize(handle, NULL)/1024; CloseHandle(handle); } }else if( wcscmp(FindFileData.cFileName,L".") != 0 && wcscmp(FindFileData.cFileName,L"..") != 0 && (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果是文件夾,進入遞歸 { wcscpy( pathUse,pathTemp ); wcscat( pathUse,FindFileData.cFileName ); wchar_t temp[MAX_PATH]; wcscpy( temp,pathUse ); ReadFile( pathUse ); } while ( 0 != ::FindNextFileW(hFind,&FindFileData) ) { if ( wcscmp(FindFileData.cFileName,L".") != 0 && wcscmp(FindFileData.cFileName,L"..") != 0 && !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) { wcscpy( pathUse,pathTemp ); wcscat( pathUse,FindFileData.cFileName ); HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle != INVALID_HANDLE_VALUE) { fileSize += GetFileSize(handle, NULL)/1024; CloseHandle(handle); } }else if( wcscmp(FindFileData.cFileName,L".") != 0 && wcscmp(FindFileData.cFileName,L"..") != 0 && (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的下一個文件:如果是文件夾,進入遞歸 { wcscpy( pathUse,pathTemp ); wcscat( pathUse,FindFileData.cFileName ); wchar_t temp[MAX_PATH]; wcscpy( temp,pathUse ); ReadFile( temp ); } } FindClose(hFind); }}以上是遞歸獲取一個文件夾大小的方法。你只要在找到文件的時候做copy動作就可以了。代碼是unicode編程,亂碼文件也能計算在內。再給你個非unicode的。long fileSize;void ReadFile( CString path){ CFileFind finder; BOOL res = finder.FindFile(path); while(res) { res=finder.FindNextFile(); if(!finder.IsDots()&&!finder.IsDirectory()){ CString fileN = finder.GetFileName(); CString path2 = path1; path2 += fileN; //具體文件的全路徑 HANDLE handle = CreateFile( path2, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if (handle != INVALID_HANDLE_VALUE) { fileSize += GetFileSize(handle, NULL)/1024; CloseHandle(handle); } } else { if(finder.IsDots()) continue; else if(finder.IsDirectory()) { path=finder.GetFilePath(); ReadFile(path); } } } finder.Close();} http底层是通过socket实现的吗? SetWindowsHookEx怎么挂钩一个进程的所有线程? xml读取内存暴增问题(已经排好版面) 网卡可不可能将同一个数据包往上递两次? 怎样向ListCtrl中的指定列插入图标 [芊]什么是热键 如何成批获取行?大哥们请帮忙啊 我的debugview窗口到哪儿去了? 《vc++高级网络编程》电子版谁能弄到? DLL ATL编写的COM如何让他不自动注册 求助!编译错误,找不到错误源
8楼
void ReadFile( wchar_t* wcPathName)
{
wchar_t path[MAX_PATH];
wchar_t pathTemp[MAX_PATH];
wchar_t pathUse[MAX_PATH];
wcscpy( pathTemp,wcPathName );
wcscat( pathTemp,L"\\" ); WIN32_FIND_DATAW FindFileData;
HANDLE hFind;
wcscpy( path,pathTemp );
wcscat( path,L"*.*" ); hFind = ::FindFirstFileW( path, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
return;
}else
{
if ( wcscmp(FindFileData.cFileName,L".") != 0 &&
wcscmp(FindFileData.cFileName,L"..") != 0 &&
!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果不是 . ..,也不是文件夾(是文件)
{
wcscpy( pathUse,pathTemp );
wcscat( pathUse,FindFileData.cFileName );
HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (handle != INVALID_HANDLE_VALUE)
{
fileSize += GetFileSize(handle, NULL)/1024;
CloseHandle(handle);
}
}else if( wcscmp(FindFileData.cFileName,L".") != 0 &&
wcscmp(FindFileData.cFileName,L"..") != 0 &&
(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的第一個文件:如果是文件夾,進入遞歸
{
wcscpy( pathUse,pathTemp );
wcscat( pathUse,FindFileData.cFileName );
wchar_t temp[MAX_PATH];
wcscpy( temp,pathUse );
ReadFile( pathUse );
} while ( 0 != ::FindNextFileW(hFind,&FindFileData) )
{
if ( wcscmp(FindFileData.cFileName,L".") != 0 &&
wcscmp(FindFileData.cFileName,L"..") != 0 &&
!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
{
wcscpy( pathUse,pathTemp );
wcscat( pathUse,FindFileData.cFileName );
HANDLE handle = CreateFileW( pathUse, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (handle != INVALID_HANDLE_VALUE)
{
fileSize += GetFileSize(handle, NULL)/1024;
CloseHandle(handle);
}
}else if( wcscmp(FindFileData.cFileName,L".") != 0 &&
wcscmp(FindFileData.cFileName,L"..") != 0 &&
(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //找到的下一個文件:如果是文件夾,進入遞歸
{
wcscpy( pathUse,pathTemp );
wcscat( pathUse,FindFileData.cFileName );
wchar_t temp[MAX_PATH];
wcscpy( temp,pathUse );
ReadFile( temp );
}
}
FindClose(hFind);
}
}以上是遞歸獲取一個文件夾大小的方法。你只要在找到文件的時候做copy動作就可以了。
代碼是unicode編程,亂碼文件也能計算在內。
再給你個非unicode的。
long fileSize;
void ReadFile( CString path)
{
CFileFind finder;
BOOL res = finder.FindFile(path);
while(res)
{
res=finder.FindNextFile();
if(!finder.IsDots()&&!finder.IsDirectory()){
CString fileN = finder.GetFileName();
CString path2 = path1;
path2 += fileN; //具體文件的全路徑
HANDLE handle = CreateFile( path2, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (handle != INVALID_HANDLE_VALUE)
{
fileSize += GetFileSize(handle, NULL)/1024;
CloseHandle(handle);
}
}
else
{
if(finder.IsDots())
continue;
else if(finder.IsDirectory())
{
path=finder.GetFilePath();
ReadFile(path);
}
}
}
finder.Close();
}