[英]Can't read whole file in c
我正在嘗試將內容從一個文件移動到另一個文件。
我的代碼:
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 )會導致它發出文件結束信號,即使它實際上不是結束),並使用二進制模式將修復它。 在其他操作系統上,這是一個空操作,但仍然可以讓讀者了解您的意圖和您希望使用的數據類型,因此即使它們不是嚴格需要的,也是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.