[英]Program doesn't copy files properly
它只是復制文件名的第一個字母,文件類型是 .file 而不是真實的。
該程序可用於根據它們的 LastWriteTime 將文件排序和復制到不同的目錄(年份和季度)。
void sort(std::string quartal, const char * c_pfad, SYSTEMTIME datum, WIN32_FIND_DATA *wfd_p){
year = datum.wYear;
str_year = patch::to_string(year); // convert
year_path = dir + str_year + "\\"; // C:\\Pictures\\2015\\
CreateDirectory(convert(year_path), NULL); // year-dir
quartal_path = year_path + quartal; // C:\\Pictures\\2015\\Erstes Quartal\\
CreateDirectory(convert(quartal_path), NULL); // quarter-dir
ziel = quartal_path + *wfd_p->cFileName;
CopyFile( c_pfad, convert(ziel), false );
}
void schleife(const char* file){
WIN32_FIND_DATA wfd;
HANDLE fHandle = FindFirstFile(file,&wfd);
do
{
// Neither . nor .. (subdirectories)
if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) ))
{
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
findDirGes = findDirGes.substr (0, findDirGes.size()-1) + wfd.cFileName + "\\*";
schleife(convert(findDirGes)); // no file but directory
}
else
{
pfad = findDirGes.substr (0, findDirGes.size()-1) + wfd.cFileName;
WIN32_FILE_ATTRIBUTE_DATA dateidaten;
GetFileAttributesEx(convert(pfad), GetFileExInfoStandard, &dateidaten);
// cprintf("\n %d", dateidaten.ftLastWriteTime);
FILETIME test = dateidaten.ftLastWriteTime;
// cprintf("\n %d", test);
SYSTEMTIME datum;
FileTimeToSystemTime(&test, &datum);
switch (datum.wMonth){
case 1:
case 2:
case 3:
sort("Erstes Quartal\\", convert(pfad), datum, &wfd );
break;
case 4:
case 5:
case 6:
sort("Zweites Quartal\\", convert(pfad), datum, &wfd );
break;
case 7:
case 8:
case 9:
sort("Drittes Quartal\\", convert(pfad), datum, &wfd );
break;
case 10:
case 11:
case 12:
sort("Viertes Quartal\\", convert(pfad), datum, &wfd );
break;
}
}
}
}
while (FindNextFile(fHandle,&wfd));
FindClose(fHandle);
}
*該程序的問題在於它會遍歷您輸入的目錄中的所有文件,如果涉及到另一個目錄,它會完美地對文件進行排序和復制,但之后它不會繼續處理其中的文件(或目錄)上面的目錄。
謝謝你的幫助。
僅使用一個全局變量WIN32_FIND_DATA wfd;
對於所有遞歸調用都是錯誤的。 每次需要遞歸時使用單獨的局部變量。
void schleife(const char* file)
{
WIN32_FIND_DATA wfd; // local variable
HANDLE fHandle = FindFirstFile(file, &wfd);
do
{
...
schleife(convert(findDirGes)); // recursive call
...
}
while (FindNextFile(fHandle, &wfd));
FindClose(fHandle);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.