提问人:hahaha1144 提问时间:10/8/2023 更新时间:10/11/2023 访问量:101
复制 Windows 的系统文件 (c:\windows\system32) 时发生意外情况
Something unexpected happened copying system files for Windows (c:\windows\system32)
问:
#define FILE_NAME_MAX_SIZE 512
#define buf_len 5
std::string szFileData;
char file_name[FILE_NAME_MAX_SIZE + 1] = {0};
char databuf[buf_len + 1] = {0};
//printf("------------------\nEnter the file name to transfer:\n");
//scanf("%s",&file_name);
//printf("------------------\n");
int i = 1, unReadLen = 0;
int count = 0;
//-----------------------------------------
FILE* fp = fopen("C:\\Windows\\System32\\calc.exe", "rb");
FILE*fp2 = fopen("C:\\Users\\OS\\Desktop\\aa.exe", "wb");
//------------------------------------------
if (fp == NULL)
{
printf("File:%s Not Found!", file_name);
}
else
{
while (1)
{
fseek(fp, unReadLen, SEEK_SET);
count = fread(databuf,1, buf_len, fp);
unReadLen += count *1;
printf("count:%d\n", count);
printf("unReadLen:%d\n", unReadLen);
printf("%d:%s\n", i++, databuf);
fwrite(databuf, 1, count, fp2);
szFileData.append(databuf);
memset(databuf, 0, sizeof(databuf));
if (count < buf_len)
{
printf("end\n"); fclose(fp); fclose(fp2); break;
}
}
}
当您将文件从系统目录复制到桌面时,文件大小会发生变化,但复制的文件会在此处输入图像描述
使用 cmd 对文件大小相同的文件执行复制命令,在此处输入图像描述
答:
1赞
Joshua
#1
这段代码很狡猾:
if (count < buf_len)
替换为
if (count <= 0)
您可能会无缘无故地阅读简短的内容。
我怀疑这不是实际问题,但应该首先解决这个问题,以将其作为可能的问题从分析中解脱出来。
评论
0赞
Sam Varshavchik
10/8/2023
您不会从普通文件中获得简短的读取。尤其是在使用 .不对。fread()
1赞
Joshua
10/8/2023
@SamVarshavchik:我有。他有一个奇怪的缓冲区大小,也更有可能。
1赞
hahaha1144
10/11/2023
#2
发现原因是Windows 64位系统文件重定向引起的
评论
szFileData.append(databuf);
databuf
szFileData
append()
std::string
00
main
szFileData
append()