c# - 我可以判断另一个进程是否正在创建文件吗?

标签 c# windows file locking

我正在编写一个 Windows 服务来处理由我无法控制的另一个进程创建的文件。这些文件可能非常大(数百兆字节)。

我需要处理文件,然后在创建文件后将其删除。

所有文件都将写入特定目录(据我所知,仅通过直接文件副本),因此我可以定期迭代该目录中的文件,处理它们,然后删除它们。

我担心的是,如果我的服务在写入大文件期间查询目录会发生什么?该文件会显示给我的服务吗?它会被锁定以便我无法获得读取权限吗?我是否需要执行任何特殊操作来检查文件是否已完成复制,或者我可以只查询 File.Exists() 或尝试使用 FileAccess.Read 打开它。 Windows 如何标记正在复制的文件?

最佳答案

如果这是普通的 win32,您将尝试使用 CreateFile() 打开该文件。 ,以及拒绝其他人写入访问的共享模式。如果其他程序仍在写入文件,则该操作将会失败,因为当文件已使用写访问权限打开时,您无法拒绝写访问权限。如果成功,您就知道其他进程已完成。

例如,在 .net 中,您可以创建 FileStream使用接收 FileShare 的构造函数之一范围。这最终将映射到底层的 CreateFile() API。

关于c# - 我可以判断另一个进程是否正在创建文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218367/

相关文章:

c# - 如何生成新的 session ID

windows - 在 Windows 上滚动和缩放 SVG 查看器?

node.js - 如何使用 Restify 提供静态文件

Python 在读取和打印简单文件时卡住

python - “ascii”编解码器在执行 bs 时无法解码字节 0xcb

c - 如何使用 fscanf 从文件中读取并查找与用户输入匹配的记录

c# - xaml c# 中的可观察集合静态资源

c# - 如何使用 C# 从谷歌表格中获取最后一行

c# - 如何解决 WCF 中的 System.ServiceModel.ServerTooBusyException?

windows - Docker 端口绑定(bind)失败。为什么是 "permission denied"?