c - 使用 Windows API 读取文件

标签 c windows visual-studio-2010

我正在尝试编写一个从文件中读取字符的控制台程序。 我希望它能够从 Unicode 文件和 ANSI 文件中读取。

我该如何解决这个问题?我是否需要以编程方式区分文件类型并协调阅读?或者我能否以某种方式使用 Windows API 数据类型,如 TCHAR 和类似的东西。

从文件中读取的唯一区别是,在 Unicode 中,我必须为一个字符读取 2 个字节,而在 ASNSI 中,我必须读取它的 1 个字节?

我对这个 Windows API 有点迷茫。 会很感激任何帮助 谢谢

最佳答案

您可以尝试在缓冲区中以二进制模式读取文件的第一个 block (1 KB 应该足够),然后使用 IsTextUnicode确定它是否可能是某种 Unicode 变体的函数;注意这个函数,除非它找到一些“强有力”的证据证明它是 Unicode 文本(例如 BOM),否则它会从根本上对缓冲区执行统计分析以确定“它看起来像”,因此它可能会给出错误的结果;此函数失败的一个例子是(不)著名的“Bush hid the facts”错误。

不过,您仍然可以使用其标志设置完成了多少猜测。

请注意,如果您的应用程序并不真正操作/显示文本,您甚至可能不需要确定它是 ANSI 还是 Unicode,而只需让它与编码无关即可。

关于c - 使用 Windows API 读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275212/

相关文章:

c - 如何在gcc中指定库路径?

c++ - 这两段代码有何不同?

c - 如何获取用户输入的文本并计算我正在搜索的单词数

windows - 如何重启rabbitmq中的erl.exe和epmd.exe?

visual-studio-2010 - 如何在 Visual Studio 2010 中转到输出的第一行?

c - 什么会导致 malloc 初始化内存?

c# - 处理拖动时是否可以更改鼠标光标(来自 DragOver 事件)?

c++ - 在没有管理员权限的情况下获取主域 SID

visual-studio-2010 - 改变目标框架

c# - 启动时启动应用程序,使用错误的路径加载