file - 覆盖 Windows 中打开的文件

标签 file winapi

Windows 在什么情况下允许覆盖打开的文件?这是允许的吗?这包括将不同的文件重命名为与打开的文件相同的名称。

最佳答案

如果你看documentation for CreateFile() ,有这个dwShareMode参数。这可以确定另一个进程在该文件打开时可以对该文件执行什么操作。

指定FILE_SHARE_READ可以让另一个进程打开该文件进行读取。有FILE_SHARE_WRITE,这意味着另一个进程可以写入它。还有FILE_SHARE_DELETE,它允许删除和(IIRC)重命名。

如果有人在没有 FILE_SHARE_WRITE 的情况下打开该文件,而您打开该文件以进行写访问,则会收到 ERROR_SHARING_VIOLATION 错误消息。否则你应该能够写入它。

不幸的是,如果一个进程出现并且没有设置共享标志来允许您需要的东西,那么您就很不走运了。尽管您也许可以使用 MoveFileEx()使用选项MOVEFILE_DELAY_UNTIL_REBOOT。但我不确定这是否有效;我对这个电话了解不多,只知道它存在。 :-)

关于file - 覆盖 Windows 中打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772330/

相关文章:

c - 如何处理 Windows 的 ReadDirectoryChangesW() 及其混合的长/短文件名输出?

c - 将 40 个套接字绑定(bind)到 40 个不同的 IP 地址

C#激活蓝牙串口服务

c++ - 如何检查窗口按钮是否被按下 C++

具有结果选择和复制功能的 Linux 搜索工具

c++ - 从文件中获取信息而不遍历其内容

c - 不断向文件(SDCard)写入数据时,应该多久打开和关闭一次文件?

c++ - 如何向 GetFileName 添加扩展名?

java - 解析从命令行作为参数传递给 Java 的文件

c# - 读写8位以上的符号