C风格,C++流或Win32 API文件I/O?

Ste*_*hen 5 c++ file-io winapi

我读过C++ Streams和C风格的IO?(以及其他页面)试图帮助我决定在我正在进行的项目中实现某些文件IO的方法.

背景 我是C++和Windows编程的新手,我一直在C和命令行应用程序中工作.对这个问题的n00b提前道歉.

问题 我想读取一个文本文件,处理内容并输出到另一个(新)文本文件.我在Win32环境中工作(这对于可预见的未来不会改变)并且正在通过_T样式宏编写应用程序以识别Unicode."处理"可以包括插入/附加/删除文本行,最多128个字符.

这个问题 我更喜欢写一些强大的东西,因此I/O错误处理是一个考虑因素.我认为我需要远离C风格文件I/O,除非简化代码和类型检查没有其他原因 - 即在更多的OO POV中处理这个问题.使用Win32 API函数而不是C++流函数(如果有的话)有什么好处?你能为这两种方法推荐一个好的底漆吗?(我的谷歌搜索给我留下了一点信息超载)

非常感谢

Ben*_*igt 7

使用Win32 API函数而不是C++流函数(如果有的话)有什么好处?

  1. 速度
  2. 能够使用重叠I/O一次处理多个操作而无需线程(以及同步的复杂性)
  3. 速度
  4. 更具体的错误代码
  5. 速度
  6. 速度
  7. 低依赖性足迹(与MSVC++ 7.x,8.0,9.0,10.0和可能大多数其他供应商相比)
  8. 速度

  • 缺点是"没有机会将代码转移到Windows以外的任何其他东西".目前尚不清楚这对OP是否重要. (6认同)
  • @sean:只有学位.如果使用C或C++标准库,则必须以某种方式部署它们.@Neil:除了依赖于C和C++库本身之外,使用C或C++标准库的代码对所有与windows.h相关的内容都有间接依赖关系.此外,没有必要重新分配在`windows.h`中找到的任何东西,相应的DLL已经在系统上.而C和/或C++库必须包含在应用程序中.这可以使安装程序增加数量级. (4认同)
  • 而且我没有看到windows.h如何被描述为"低依赖性足迹". (3认同)
  • @Jonathan:由于他没有询问Win32 API的缺点,我希望@Stephen的可移植性问题是显而易见的,他已经确定它不是最重要的因素. (2认同)
  • @Neil:不,您的用户负责查找和安装依赖项.这是(1)更多的负担和(2)大多数Windows用户完全出乎意料. (2认同)
  • 评论背后的要点是应用程序不应该链接msvcrt.dll(特别是msvcrt.dll而不是crt dll系列).根据文档"它是由Windows拥有和构建的系统组件.它仅供系统级组件使用." 它现在有效.可能不会在将来.就这样. (2认同)

小智 5

使用C++流I/O. 写入文本文件几乎不会给I/O库带来压力,并且您在代码清晰度,类型安全性以及几乎无需编写任何内容以完成工作方面获得了巨大的好处.作为一个副作用,你的代码可能会更便携,更容易理解,所以如果你在这里问一下,你会得到更好的答案.

  • @Ben您是否发现编写该应用程序的人不知道他在做什么? (2认同)

Ben*_*igt 2

从更广泛的角度来看,如果您需要一个没有额外依赖项的小型应用程序,那么直接使用 Win32 是很好的选择。

对于 C++ iostreams 做得更好的任何事情,您可能想看看 Boost::Spirit。看起来它具有 iostream 的所有类型安全性,并且性能更好。

这里确实有两个问题:文件 I/O 和文本处理。Win32 在第一个方面做得非常好,但对第二个方面没有提供任何帮助。Boost::Spirit 在第二点上做得很好。C++ iostream 在这两项任务中都处于边缘状态,除非可移植性是最重要的功能,否则应避免使用它们。

  • @Ben 我认为你不理解 Spirit 或 C++ iostreams。 (2认同)

归档时间:

查看次数:

4024 次

最近记录:

14 年,3 月 前