代码之家  ›  专栏  ›  技术社区  ›  Kra

GetLine和16H(26D)字符

  •  1
  • Kra  · 技术社区  · 14 年前

    在VC++环境中,im使用(string)getline函数读取打开文件中的单独行。问题是getline将字符1ah作为文件的结尾,如果它出现在行中,则整个读取过程将提前结束。有什么解决办法吗?

    代码片段:

    fstream LogFile (Source,fstream::in);
    string Line
    
    while (getline(LogFile,Line))
    {  ....  }
    

    文件内容:

    line1text1asdf
    line2text2asd //EOF for getline here
    line3asdas // this line will never be read by getline
    

    感谢您提供任何信息。

    克拉

    3 回复  |  直到 14 年前
        1
  •  -1
  •   Puppy    14 年前

    将getline替换为手动滚动函数,该函数按字符逐个读取,直到行尾或eof(由您定义)。

        2
  •  2
  •   Hans Passant    14 年前

    是的,ctrl+z是古代操作系统中文本文件的eof文件字符。它是一个控制字符,不应该出现在文本文件中,您不能有意义地翻译它。如果需要的话,二进制文件就是你所能做的。

        3
  •  -1
  •   Jorg B Jorge    14 年前

    我通常更喜欢以二进制方式打开文件,用下面的函数读取数据,并解析'\n'和'\r'以检测行的结尾。

    UINT xread(HFILE hfile, void *buf, UINT size)
    {
       UINT ret;
    
    
       #if defined(_WIN32)
    
       ret = _read(hfile, buf, size);
    
       #elif defined(_LINUX) || defined(__APPLE__)
    
       ret = read(hfile, buf, size);
    
       #endif
    
    
       return(ret);
    }