簡體   English   中英

無法在c中讀取整個文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM