gpt4 book ai didi

windows - 在 Windows 中,除了可移植性之外,我应该使用 CreateFile 还是 fopen?

转载 作者:可可西里 更新时间:2023-11-01 12:42:54 26 4
gpt4 key购买 nike

有什么区别,在什么情况下,一个或另一个在某些方面更优越?

最佳答案

首先是函数fopen只能用于对文件进行简单的便携操作。

CreateFile另一方面不仅可以用于文件操作,还可以用于目录(使用相应的选项)、管道和各种 Windows 设备。

CreateFile有很多额外有用的开关,比如 FILE_FLAG_NO_BUFFERING , FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_SEQUENTIAL_SCAN ,这在不同的场景中非常有用。

您可以使用 CreateFile文件名长于 MAX_PATH人物。对于某些服务器应用程序或必须能够打开任何 文件的服务器应用程序(例如病毒扫描程序或备份应用程序)来说,这可能很重要。这是通过使用命名空间语义来实现的,尽管这种模式有其自身的问题,比如能够实际创建一个名为 ".." 的文件。或 L"\xfeff\x20\xd9ab" (祝你好运,稍后尝试删除它们)。

您可以使用 CreateFile在不同的安全场景中。我的意思不仅是安全属性的使用。如果当前进程具有 SE_BACKUP_NAME 或 SE_RESTORE_NAME 权限(就像管理员通常具有的权限)并启用此权限,则可以使用 CreateFile打开任何文件以及您无法通过安全描述符访问的文件。

如果只想读取一个文件的内容,可以使用CreateFile , CreateFileMappingMapViewOfFile创建文件映射。然后您可以像处理内存块一样处理文件,这可能会提高应用程序的速度。

该函数还有其他用途,在the corresponding MSDN article.中有详细描述。

所以我可以总结一下:只有当您有严格的可移植性要求或需要通过 FILE* 时到一些外部库,那么你必须使用 fopen .在所有其他情况下,我建议您使用 CreateFile .为获得最佳效果,我还建议专门学习 Windows API,因为您可以找到许多有用的功能。

已更新:与您的问题没有直接关系,但我也建议您看一下transactional I/O。从 Windows Vista 开始支持的功能。使用此功能,您可以将对文件、目录或注册表的一系列操作作为一个不可中断的事务来提交。这是一个非常强大和有趣的工具。如果您现在还没有准备好使用事务性 I/O 函数,您可以从 CreateFile 开始。稍后将您的应用程序移植到事务性 I/O。

关于windows - 在 Windows 中,除了可移植性之外,我应该使用 CreateFile 还是 fopen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com