【发布时间】:2020-02-29 07:11:35
【问题描述】:
我正在编写一个等待将文件复制到文件夹的应用程序,当文件被复制后,我会尝试打开该文件。
我遇到了文件长度有时为零的问题。我相信这是因为文件没有完全完成复制到磁盘。
我已经按照https://stackoverflow.com/a/937558/5330854 解决方案检查文件是否被锁定,但这仍然允许我打开长度为零的文件(我假设如果正在将文件复制到磁盘,那么当文件不为零时,这将被锁定,我将无法打开它)。
知道如何检查文件是否已完成复制到磁盘吗?
while (stream == null && IsWithingTimeCap(startTime))
{
stream = GetFileStream(fileInfo);
if (stream == null)
{
Thread.Sleep(5000);
}
}
if (fileInfo.Length == 0)
{
//log
}
private static Stream GetFileStream(IFileInfo fileInfo)
{
Stream stream = null;
try
{
stream = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return null;
}
return stream;
}
【问题讨论】:
-
感谢您抽出宝贵时间分享您的问题。但是您的问题中缺少一些东西。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、您的开发环境和数据结构,并分享更多代码(无截图)、一些示例、屏幕图像或草图以及用户故事或场景图。为了帮助您改进您的要求,请阅读右上角的 How do I ask a good question 和 我避免提出的问题。
-
您如何等待要复制的文件?文件系统观察者?什么是 fileInfo 以及如何以及何时获得它?可以多放点代码和场景顺序吗?
标签: c# file file-io file-locking