VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 194|回复: 2

CreateFile 想要实现 fopen 的 "a+" 操作怎样设置标志位?

[复制链接]
15_avatar_middle
最佳答案
0 
在线会员 发表于 2021-7-27 11:14:16 | 显示全部楼层 |阅读模式
CreateFile 想要实现 fopen 的 "a+" 操作怎样设置标志位?
查了一些资料,a+的操作是在文件结尾追加写,并且允许读操作,CreateFile 中的 dwDesiredAccess 标志位我设置成 FILE_APPEND_DATA | GENERIC_READ 是否可以? 这样打开文件的话文件指针是指向文件开头还是末尾,是否需要再次调用 SetFilePointerEx 把文件指针指向文件末尾?
跪求大神解答CreateFile 想要实现 fopen 的 "a+" 操作怎样设置标志位?




上一篇:写入多行字符串到注册表 REG_MULTI_SZ的问题
下一篇:编写可变参数函数模板失败
62_avatar_middle
最佳答案
0 
在线会员 发表于 2021-7-28 07:53:35 | 显示全部楼层
您可以使用 FILE_APPEND_DATA 访问说明符让 CreateFile() 在创建/打开文件后自动查找文件末尾(否则,您必须使用 SetFilePointer/Ex() 手动查找),然后再将新数据写入文件。
31_avatar_middle
最佳答案
46 
在线会员 发表于 2021-7-28 14:38:24 | 显示全部楼层
现成的,文件不存在自动创建,可追加写入。
  1. int Write(LPTSTR lpPath, LPTSTR lpText)
  2. {
  3.         //创建文件
  4.         HANDLE hFile = CreateFile(lpPath,        // 文件路径
  5.                 GENERIC_WRITE | GENERIC_READ,        // 写和读文件
  6.                 0,                                                                // 不共享读写
  7.                 NULL,                                                        // 缺省安全属性
  8.                 OPEN_ALWAYS,                                        // 打开文件,不存在则创建
  9.                 FILE_ATTRIBUTE_NORMAL,                        // 一般的文件      
  10.                 NULL);                                                        // 模板文件为空

  11.         if (hFile == INVALID_HANDLE_VALUE)
  12.         {
  13.                 PrintError(_T("CreateFile failed"));
  14.                 return -1;
  15.         }

  16.         // 文件指针移动到文件末尾,追加内容的关键操作
  17.         SetFilePointer(hFile, NULL, NULL, FILE_END);

  18.         // 将内容写入文件
  19.         DWORD dwWriten = 0;
  20.         if (!WriteFile(hFile, lpText, _tcsclen(lpText), &dwWriten, NULL))
  21.         {
  22.                 PrintError(_T("WriteFile failed"));
  23.                 CloseHandle(hFile);
  24.                 return -2;
  25.         }

  26.         // 刷新指定文件的缓冲区并将所有缓冲数据写入文件
  27.         FlushFileBuffers(hFile);

  28.         CloseHandle(hFile);

  29.         return 1;
  30. }

  31. ————————————————
  32. 版权声明:本文为CSDN博主「kim-2006」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  33. 原文链接:https://blog.csdn.net/k83133058/article/details/119178076
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-9-27 06:20

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表