我正在编写一个 Windows 服务来处理由我无法控制的另一个进程创建的文件。这些文件可能非常大(数百兆字节)。
我需要处理文件,然后在创建文件后将其删除。
所有文件都将写入特定目录(据我所知,仅通过直接文件副本),因此我可以定期迭代该目录中的文件,处理它们,然后删除它们。
我担心的是,如果我的服务在写入大文件期间查询目录会发生什么?该文件会显示给我的服务吗?它会被锁定以便我无法获得读取权限吗?我是否需要执行任何特殊操作来检查文件是否已完成复制,或者我可以只查询 File.Exists() 或尝试使用 FileAccess.Read 打开它。 Windows 如何标记正在复制的文件?
最佳答案
如果这是普通的 win32,您将尝试使用 CreateFile()
打开该文件。 ,以及拒绝其他人写入访问的共享模式。如果其他程序仍在写入文件,则该操作将会失败,因为当文件已使用写访问权限打开时,您无法拒绝写访问权限。如果成功,您就知道其他进程已完成。
例如,在 .net 中,您可以创建 FileStream
使用接收 FileShare
的构造函数之一范围。这最终将映射到底层的 CreateFile() API。
关于c# - 我可以判断另一个进程是否正在创建文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218367/