It just copies the first letter of the file name and file type is .file instead of the real one.
The program can be used to sort and copy files into different directories (years and quarters) according to their 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);
}
*The problem of the program is that it goes through all the files in the directory you typed in and if it comes to another directory it sorts and copies the files perfectly but after that it doesn't continue with the files (or directories) in the directory above.
Thanks for your help.
答案 0 :(得分:0)
Using only one global variable WIN32_FIND_DATA wfd;
for all the recursive calls is an error. Use a separate local variable each time you need to recurse.
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);
}