从文件中读取而不阻止它被删除

Posted

技术标签:

【中文标题】从文件中读取而不阻止它被删除【英文标题】:Read from file without blocking it from being deleted 【发布时间】:2021-06-08 16:51:26 【问题描述】:

我正在编写一个从网络上的文件共享读取的 Windows 服务。有时文件被写入文件共享,然后很快被删除。有没有一种方法可以让我在读取文件的同时也允许删除文件?

基本上我有一个 filesystemwatcher 监视网络路径,然后在该目录的 Created 事件中检查文件路径,然后尝试在新线程上读取文件。当将文件写入目录的应用程序试图快速删除它时,它会收到 IOException ,说明有另一个进程正在使用该文件。我没有在网络电脑上写app,不想打断它的正常功能

这是我的代码

public async Task Copy(string src, string dest) 
    using (FileStream srcReader = File.Open(src, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    using (Stream destWriter = File.Create(dest)) 
       await srcReader.CopyToAsync(destWriter, cancelToken);

【问题讨论】:

【参考方案1】:

FileShare has a Delete flag。所以试试这个:

File.Open(
    src, 
    FileMode.Open, 
    FileAccess.Read, 
    FileShare.ReadWrite | FileShare.Delete
)

【讨论】:

以上是关于从文件中读取而不阻止它被删除的主要内容,如果未能解决你的问题,请参考以下文章

阻止异步提取在webpacked应用程序中完成

在互斥锁解锁时取消阻止定时接收

Mongoose 子文档预删除中间件未调用

由于相同的条件,阻止通过条件参数保存而不阻止 Saveas

为啥从 Info.plist 中删除“Main nib file base name”会阻止应用程序执行?

如何阻止GCC从obj文件中的字符串文字中删除尾随换行符?