2010-02-21 38 views
6

Tôi đang cố sao chép tệp từ thư viện được chỉ định vào thư mục hiện tại. Tôi có thể sao chép tập tin văn bản một cách hoàn hảo. Bất kỳ tệp nào khác đều bị hỏng. Chương trình phát hiện một feof trước khi nó cần.Cách đọc tệp nhị phân trong c? (video, hình ảnh hoặc văn bản)

#include <stdio.h> 

int BUFFER_SIZE = 1024; 
FILE *source; 
FILE *destination; 
int n; 
int count = 0; 
int written = 0; 

int main() { 
    unsigned char buffer[BUFFER_SIZE]; 

    source = fopen("./library/rfc1350.txt", "r"); 

    if (source) { 
     destination = fopen("rfc1350.txt", "w"); 

     while (!feof(source)) { 
      n = fread(buffer, 1, BUFFER_SIZE, source); 
      count += n; 
      printf("n = %d\n", n); 
      fwrite(buffer, 1, n, destination); 
     } 
     printf("%d bytes read from library.\n", count); 
    } else { 
     printf("fail\n"); 
    } 

    fclose(source); 
    fclose(destination); 

    return 0; 
} 

Trả lời

16

Bạn đang sử dụng máy tính Windows? Thử thêm "b" vào chuỗi chế độ trong các cuộc gọi đến fopen.

Từ người đàn ông fopen (3):

Chuỗi chế độ cũng có thể bao gồm chữ 'b' hoặc như là một ký tự cuối cùng hoặc là một nhân vật giữa các nhân vật trong bất kỳ chuỗi hai ký tự mô tả ở trên. Điều này hoàn toàn phù hợp với C89 và không có hiệu lực; 'b' được bỏ qua trên tất cả các hệ thống phù hợp POSIX, bao gồm cả Linux. (Các hệ thống khác có thể xử lý các tệp văn bản và các tệp nhị phân khác nhau và thêm 'b' có thể là ý tưởng hay nếu bạn làm I/O vào tệp nhị phân và mong muốn chương trình của bạn có thể được chuyển sang môi trường không phải Unix .)
+0

Đã khắc phục sự cố đó. Cảm ơn bạn. –

4

Bạn cần phải xác định "b" tùy chọn để fopen:

source = fopen("./library/rfc1350.txt", "rb"); 
... 
destination = fopen("rfc1350.txt", "wb"); 

Nếu không có nó, các tập tin được mở ra trong văn bản ("t") Chế độ, và kết quả này trong bản dịch của end-of-line ký tự .

2

Bạn cần mở tệp ở định dạng nhị phân thay vì định dạng văn bản. Trong các cuộc gọi của bạn tới số fopen, sử dụng "rb""wb" thay vì "r""w" tương ứng.

Các vấn đề liên quan