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

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

所有文件都将被写入一个特定的目录(据我所知只是一个直接的文件副本),因此我可以定期遍历该目录中的文件,进行处理,然后将其删除。

我担心的是,如果我的服务在写入大文件期间查询目录,会发生什么情况?该文件会显示在我的服务中吗?它将被锁定以使我无法获得读取权限吗?我需要做一些特别的事情来检查文件是否已完成复制,还是可以查询File.Exists()还是尝试使用FileAccess.Read打开它。 Windows如何标记正在复制的文件?

最佳答案

如果这是普通的win32,则您将尝试使用 CreateFile() 和拒绝对他人进行写访问的共享模式来打开文件。如果另一个程序仍在写文件,那将失败,因为当文件已经用写访问权限打开时,您不能拒绝写访问。如果成功,则说明其他过程已完成。

例如,在.net中,您可以使用接收 FileStream 参数的构造函数之一来创建 FileShare 。最终,它将最终映射到基础CreateFile() API。

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

10-10 07:58