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