使用正则表达式时,处理多个拖放文件失败

本文关键字:拖放 文件 失败 处理 正则表达式 | 更新日期: 2023-09-27 18:28:57

在我的应用程序中,用户可以将多个文本文件拖放到GUI控件上,以将它们转换为另一种格式。以下是相关代码:

    private void panelConverter_DragDrop(object sender, DragEventArgs e)
    {
        string[] filenames = (string[])e.Data.GetData(DataFormats.FileDrop);
        foreach (string filename in filenames)
        {
            convertFile(filename);
        }
    }
    private void convertFile(string filename)
    {
        // build name of output file
        string convertedFile = Path.ChangeExtension(filename, ".out");
        // open input file for reading
        FileInfo source = new FileInfo(filename);
        StreamReader srcStream = source.OpenText();
        // open output file for writing
        StreamWriter dstStream = new StreamWriter(convertedFile);
        // loop over input file
        string line;
        do
        {
            // get next line from input file
            line = srcStream.ReadLine();
            if (!Regex.IsMatch(line, @"fred='d+"))
            {
                dstStream.WriteLine(line);
                dstStream.Flush();
            }
        } while (line != null);
    }

问题是,当我在GUI上放置多个文件时,实际上只有一个文件得到处理。我发现,如果我注释掉Regex行,所有删除的文件都会被处理。在这种情况下,我在处理正则表达式时是否遗漏了什么?

使用正则表达式时,处理多个拖放文件失败

尝试以下方法的变体:

private void convertFile(string filename)
{
    // build name of output file
    string convertedFile = Path.ChangeExtension(filename, ".out");
    // open input file for reading
    FileInfo source = new FileInfo(filename);
    StreamReader srcStream = source.OpenText();
    // open output file for writing
    using (StreamWriter dstStream = File.CreateText(convertedFile))
    {
        // loop over input file
        string line;
        do
        {
            // get next line from input file
            line = srcStream.ReadLine();
            if (!Regex.IsMatch(line, @"fred='d+"))
            {
                dstStream.WriteLine(line);
                dstStream.Flush();
            }
        } while (line != null);
    }
    Debug.WriteLine(string.Format("File written to: {0}", convertedFile));
}

主要的修改是使用关键字,这将保证文件资源的处理和关闭。如果问题仍未解决,请尝试以下操作:

  • 你有全局异常处理程序吗?请确保选中"调试">"异常…"。。。以便Visual Studio在抛出异常的行上自动中断。请参阅这篇关于如何操作的文章
  • 确保文件写在正确的位置。如果文件有完整路径,那么上面的Debug.WriteLine语句会告诉你这些文件是在写的

如果没有发生异常,您应该在磁盘上写入至少0长度的文件。