【问题标题】:Getting System.IO.IOException when moving file to newly created directory将文件移动到新创建的目录时出现 System.IO.IOException
【发布时间】:2015-08-10 05:56:50
【问题描述】:

我有一个代码来创建新文件夹并使用 FileSystemWatcher 将文件移动到该文件夹​​。但是它给出了以下错误。

System.IO.IOException:进程无法访问该文件,因为它 正在被另一个进程使用。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
在 System.IO.__Error.WinIOError() 在 System.IO.File.Move(String 源文件名,字符串 destFileName) 在 FolderWatcher.Program.ProcessRenewalFolder(对象发件人, 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());
            }
        }
    }'

请告诉我这是什么原因...

【问题讨论】:

标签: c# ioexception locked


【解决方案1】:

在下面的文件夹路径中

DirectoryInfo d = new DirectoryInfo(@"E:\SCN_DOCS\RENEWAL\")

如果是,则使用您的 c# 应用程序创建的任何新文件都比您需要处置新创建文件的对象,例如

Bitmap bitmap = new Bitmap();
// your Image file creation code...
bitmap.Dispose();

根据您的问题,您正在使用 .pdf 文件,因此如果您在移动文件之前在上述文件夹中创建了任何新的 pdf 文件,那么您需要处理新创建的 pdf 文件的对象。

看到这个答案https://stackoverflow.com/a/31830176/4988990

【讨论】:

    【解决方案2】:

    如果文件在生成 PDF 的程序(即,将其放入文件夹的程序)中仍处于打开状态,则可能发生这种情况。

    当您使用目录观察者时,我建议您:

    1. 将所有监视的文件放在某种列表中。
    2. 使用Timer 并处理列表中已存在 X 秒的文件。
    3. 如果无法访问该文件,请将其放在列表末尾。

    通过这种方式,您可以获得更宽容的解决方案,并且您不太可能因错误而丢失文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多