程序无法正确复制文件
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);
}
相关文章:
- 复制文件流C++静态变量
- 如何递归复制文件和目录
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- 复制文件成功,移动文件失败,参数相同 - C++
- 从 QProcess 复制文件夹的内容
- 以非常低的资源要求强制复制文件
- binding.gyp:如何使用"copies"部分在多个位置复制文件
- 如何在 Visual Studio 2015 中的构建结束时复制文件
- 自复制文件到新位置tchar不兼容
- 当我使用fs.rdbuf()复制文件时,我会丢失一些数据
- C++如何复制文件 * 指针
- 复制文件时是否可以自动创建不存在的目录?
- 复制文件时如何调用取消?(使用复制文件 ex 函数和复制进度例程回调函数)
- Linux复制文件连接到节点JS / Python / C / C 之后
- 使用C++在 Linux 中复制文件的有效方法
- 我可以在锁定文件后复制文件吗?
- 在线程中复制文件以防止冻结应用程序
- 如何使用libssh和SFTP在C/C++中复制文件
- 如何复制文件的二进制数据
- 使用 IFileOperation 复制文件 (C++)