代码之家  ›  专栏  ›  技术社区  ›  Eric Pohl

监控文件-如何知道文件何时完成

  •  11
  • Eric Pohl  · 技术社区  · 16 年前

    我们有几个.NET应用程序使用FileSystemWatcher监视目录中的新文件。这些文件是从另一个位置复制的,通过ftp等上传的。当它们进入时,这些文件以一种或另一种方式进行处理。然而,我从未见过一个令人满意的答案:对于大型文件,如何知道被监视的文件何时仍在写入?显然,我们需要等到文件完成并关闭后再开始处理它们。filesystemwatcher事件中的事件参数似乎没有解决这个问题。

    9 回复  |  直到 15 年前
        1
  •  1
  •   Chris Marasti-Georg Scott Weinstein    16 年前

        2
  •  5
  •   Ryan Ahearn    16 年前

        3
  •  3
  •   Community arnoo    7 年前
        4
  •  3
  •   Matt Lacey    16 年前

        5
  •  2
  •   Community arnoo    7 年前

    /// <summary>
    /// Waits until a file can be opened with write permission
    /// </summary>
    public static void WaitReady(string fileName)
    {
        while (true)
        {
            try
            {
                using (System.IO.Stream stream = System.IO.File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    if (stream != null)
                    {
                        System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} ready.", fileName));
                        break;
                    }
                }
            }
            catch (FileNotFoundException ex)
            {
                System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
            }
            catch (IOException ex)
            {
                System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
            }
            catch (UnauthorizedAccessException ex)
            {
                System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
            }
            Thread.Sleep(500);
        }
    }
    

    related question

        6
  •  1
  •   kokos    16 年前

        7
  •  0
  •   Joel Coehoorn    16 年前

        8
  •  0
  •   Matt Lacey    16 年前

        9
  •  0
  •   Kaniu    16 年前