2010-05-27 78 views
2

我正在編寫一個程序,它接收一個文件並將其拆分爲多個用戶指定大小的小文件,然後再將多個小文件重新加入。文件IO,處理CRLF

  1. 代碼必須努力C和C++

  2. 我對多編譯器編譯。

  3. 我閱讀和使用功能fread()fwrite()

  4. fread()fwrite()手柄字節,而不是字符串寫入文件。

我遇到的問題屬於CRLF。如果我正在閱讀的文件包含CRLF,那麼當我將文件拆分並重新連接時,我想保留它。如果文件包含LF,那麼我想保留LF。

不幸的是,fread()似乎存儲CRLF作爲\n(我認爲),以及任何由fwrite()寫的是編譯器的依賴性。

我該如何解決這個問題?

+2

'fread'和'fwrite'是標準C函數(它們在'cstdio'頭文件中聲明),而不是STL。 – dreamlax 2010-05-27 14:59:11

+0

Mybad,編輯.. – aCuria 2010-05-27 15:01:34

+3

注意:以文本模式打開文件將導致文件功能將平臺特定的EOL序列轉換爲'\ n'。如果以二進制模式打開文件,則不會發生翻譯。 – 2010-05-27 16:41:38

回答

2
#include <stdio.h> 

int main() { 
    FILE * f = fopen("file.txt", "rb"); 
    char c; 
    while(fread(&c, 1, 1, f)) { 
     if (c == '\r') { 
      printf("CR\n"); 
     } 
     else if (c == '\n') { 
      printf("LF\n"); 
     } 
     else { 
      printf("%c\n" , c); 
     } 
    } 
    fclose(f); 
} 
11

以二進制模式進行讀取/寫入。這應該與CRLF或LF行結束無關。

+0

我在做二進制讀/寫。 fread和fwrite以二進制方式工作。 – aCuria 2010-05-27 15:03:39

+1

@aCuria你是fopen(「file.txt」,「rb」)/ fopen(「file.txt」,「wb」)? – Artyom 2010-05-27 15:08:25

+1

@aCuria您需要以二進制模式打開文件。 – 2010-05-27 15:08:26