文件IO,处理CRLF

时间:2010-05-27 14:50:11

标签: c++ c

我正在编写一个程序,它接收一个文件并将其拆分为多个用户指定大小的小文件,然后再将多个小文件连接起来。

  1. 代码必须适用于C和C ++

  2. 我正在编译多个编译器。

  3. 我正在使用函数fread()fwrite()

  4. 阅读和写入文件
  5. fread()fwrite()处理字节,而非字符串。

  6. 我遇到的问题与CRLF有关。如果我正在读取的文件包含CRLF,那么当我拆分并将文件重新连接在一起时,我想保留它。如果文件包含LF,那么我想保留LF。

    不幸的是,fread()似乎将CRLF存储为\n(我认为),fwrite()编写的任何内容都依赖于编译器。

    如何处理此问题?

2 个答案:

答案 0 :(得分:11)

以二进制模式进行读/写操作。这应该与CRLF或LF线结尾无关。

答案 1 :(得分: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 );
}