项目中有个需求是要对文本内容检索并重写,我们使用的是 WriteFile 覆盖旧的文本内容

最小示例:

#include <Windows.h>

#include <iostream>

int main() {
  HANDLE hFile = CreateFile(L"File.txt",            // Open File.txt.
                            GENERIC_WRITE,          // Open for writing
                            0,                      // Do not share
                            NULL,                   // No security
                            OPEN_ALWAYS,            // Open or create
                            FILE_ATTRIBUTE_NORMAL,  // Normal file
                            NULL);                  // No template file
  const char str[] = "hellorrnworld";
  DWORD written = 0;
  if (WriteFile(hFile, str, strlen(str) + 1, &written, NULL)) {
    printf("write success");
  }

  return 0;
}

上面输出的 File.txt 里有 hello world 字符串,咋一看没什么异常,直到检索的字符串变多,才发现原先的每行字符串都被插入一行空行,并且文本编码变成 Macintosh(CR)

 

查阅相关文档才知道,r 在 Macintosh 编码格式下被认为是换行

一般的文本编码是 Windows(CRLF),如下所示

 

 

Windows(CRLF) 是 windows 里常见格式, 采用回车+换行 CR/LF 表示下一行,而 Macintosh(CR) 是使用回车表示下一行

这就导致每行文本都被新的空行填充

这里我想说的是,WriteFile 似乎可以根据文本的内容,特别是转义字符自动改变文本换行格式

我们在后面相关文本修改的需求中要对这一改变有所注意,我个人感觉这是个小坑,故记录一下

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/strive-sun/p/17214906.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!