【发布时间】:2017-06-30 09:40:40
【问题描述】:
文件是通过 FTP 上传的,它会抛出一个文件被占用的 IO 异常
var watcher = new FileSystemWatcher();
watcher.Created += (sender, e) =>
{
var lines = File.ReadAllLines(e.FullPath, Encoding.UTF8); //io exception here
};
等待您的答复,非常感谢。
【问题讨论】:
-
尝试在 Created 事件中读取文件之前添加一小段延迟。像 50/100 毫秒
-
问题是文件不会立即存在,任何大小合适的文件都需要超过 0 毫秒才能到达。问题在于您无法轻松判断上传何时完成。文件越大,需要的时间就越长。在 unix 上它更容易,因为文件随着 ftp 的进入而增长,你可以监视大小,虽然它仍然发生变化,但不要管它。但是 windows 倾向于分配和填充。
-
如果文件被锁定,那么在创建文件时检查文件是否被锁定,然后等待一段时间并重试。通过这种方式,您可以实现下载大文件。静态布尔 IsFileLocked(FileInfo 文件) { FileStream 流 = null;尝试 { stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); } 捕捉(IOException){ 返回真; } 最后 { if (stream != null) stream.Close(); } 返回假; }
标签: c# filesystemwatcher