我有一个代码来创建新文件夹并使用FileSystemWatcher将文件移动到该文件夹 . 但是它给出了以下错误 .
System.IO.IOException:进程无法访问该文件,因为它正由另一个进程使用 . 在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO .__ Error.WinIOError()at System.IO.File.Move(String sourceFileName,String destFileName)at FolderWatcher.Program.ProcessRenewalFolder(Object sender, FileSystemEventA rgs e)
以下是代码
'private static void ProcessRenewalFolder(object sender, FileSystemEventArgs e)
{
Console.WriteLine("Renewal Received.... ");
DirectoryInfo d = new DirectoryInfo(@"E:\SCN_DOCS\RENEWAL\");
DirectoryInfo dest = new DirectoryInfo(@"E:\QUEUED_SCN_DOCS\RENEWAL\");
if (!d.Exists)
{
return;
}
FileInfo[] Files = d.GetFiles("*.pdf");
string jobNo = "";
string branchCode = "";
foreach (FileInfo file in Files)
{
jobNo = file.Name;
DirectoryInfo newDir = null;
if (!Directory.Exists(dest.FullName + jobNo.ToUpper()))
{
System.IO.Directory.CreateDirectory(dest.FullName + jobNo.Substring(0, file.Name.LastIndexOf(".")).ToUpper());
}
Console.WriteLine(jobNo + " - " + branchCode);
try
{
File.Move(file.FullName, dest.FullName + jobNo.Substring(0, file.Name.LastIndexOf(".")).ToUpper() + "\\" + file.Name.ToUpper());
UpdateRenewal(jobNo.Substring(0, file.Name.LastIndexOf(".")).ToUpper());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}'
请让我知道这个的原因......
2 回答
在下面的文件夹路径
使用c#应用程序创建的任何新文件,如果是,则需要处理新创建的文件的对象
根据你的问题,你正在使用.pdf文件,所以如果你在移动文件之前在上面的文件夹中创建了任何新的pdf文件,那么你需要处理新创建的pdf文件的对象 .
看到这个答案https://stackoverflow.com/a/31830176/4988990
如果文件在生成PDF的程序(即将其放入文件夹中的程序)中仍然打开,则可能发生这种情况 .
当您使用目录观察器时,我建议您:
将所有观看的文件放入某种列表中 .
使用
Timer
并处理列表中已有X秒的文件 .如果无法访问该文件,请将其放在列表的末尾 .
通过这种方式,您可以获得更宽容的解决方案,并且由于错误,您不太可能错过文件 .