我正在尝试将内容从一个文件移动到另一个文件。
我的代码:
char *path = extractFileName(args[1]);
if (path == 0)
return -1;
FILE *input = fopen(path, "r");
rewind(input);
fseek(input, 0L, SEEK_END);
long sz = ftell(input);
printf("sz: %ld\n", sz);
rewind(input);
size_t a;
FILE *result = fopen("result.mp3", "w");
size_t counter = 0;
char buffer[128];
while ((a = fread(&buffer[0], 1, 128, input)) != 0) {
fwrite(&buffer[0], 1, a, result);
counter += a;
}
printf("%d\n", counter);
printf("ferror input: %d\n", ferror(input));
printf("feof input: %d\n", feof(input));
执行后打印
sz: 6675688
25662
ferror input: 0
feof input: 16
据我所知,这意味着C知道输入文件的大小为665kb,但是当我尝试读取25662个字节以上时返回eof。我做错了什么?
由于您的输出文件名是result.mp3
,因此您可以安全地处理非文本数据。这意味着你应该打开你的文件,以二进制方式-"rb"
和"wb"
分别。如果您在Windows上运行此代码,则不执行该操作将解释您所看到的行为(在该平台上,以文本模式读取特定字节(0x1A)会导致该信号表明文件已结束,即使实际上并没有结束),并使用二进制模式将其修复。在其他操作系统上,它是无人操作的,但仍然可以使读者了解您的意图和期望使用的数据类型,因此即使不是严格要求它们也是一个好主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句