c#随机文件在使用过程中出现其他错误

本文关键字:其他 错误 过程中 随机文件 | 更新日期: 2023-09-27 18:05:23

我写了一个应用程序,它采用未压缩的。wav文件并编码为flac文件,mp3文件和aac文件。flac和mp3工作得很好,但在进行aac编码(使用Nero aac编码器)时,我随机得到关于正在使用的文件的ioexception。有时——但不是经常——它发生在文件生成时——我的进程创建的文件怎么可能被另一个进程使用呢?但更常见的情况是,当我使用TagLib编写元标记时,我得到了错误。因此,我设置了代码,以便在出现IO错误时对有问题的文件运行sysinternal的handle.exe,但它返回的事实是该文件上没有句柄。这只是Nero aac编码器的固有问题吗?

try
{
if ( ! Directory.Exists( es.dest ) )
    {
        Directory.CreateDirectory( Path.GetDirectoryName( es.dest ) );
    }
    if ( File.Exists( es.dest ) ) { File.Delete( es.dest ); }
    bool CommandGenerated = enc.GenerateCommandLine();
    string procOutput = String.Empty;
    if ( CommandGenerated )
    {
        Console.Out.WriteLine( "Starting:" );
        p = new Process();
        p.StartInfo.WorkingDirectory = Path.GetDirectoryName( current_config_exe );
        p.StartInfo.FileName = current_config_exe;
        p.StartInfo.Arguments = enc.ToString();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        procOutput = p.StandardOutput.ReadToEnd();
        p.WaitForExit();
        int exit_code = p.ExitCode;
        p.Close();
        p.Dispose();
        string exit_msg = "Encoder exitcode: " + exit_code + "'n";
        if ( exit_code != 0 )
        {
            Console.WriteLine( "There was a problem. Do you want to continue? (y/n) (Default = y)" );
            string response = Console.ReadLine();
            if ( response.ToLower() == "n" )
            {
                throw new Exception( "Note: " + exit_msg );
            }
        }
        else if ( es.use_taglib_for_meta && enc.metaswitches != null )
        {
            Meta meta = new Meta( es.dest );
            if ( meta.SetMetaTags( enc.metaswitches, true ) )
            {
                WriteLog( "Meta tags successfully wriiten to: 'n" + es.dest, true, false );
            }
            else
            {
                WriteLog( "Meta tags NOT wriiten to: " + es.dest, true );
            }
        }
    }
}
catch ( IOException ex )
    {
        Handler.GetHoldingProcess( es.dest );
        Program.WriteLog( "(writing track to file) Error saving file " + es.dest + ":'n" + ex, true );
        return false;
    }

c#随机文件在使用过程中出现其他错误

我建议您使用其他SysInternals工具- filemon.exe

  1. 将断点设置在抱怨IOException的方法上
  2. 从VS
  3. 在调试模式下运行应用程序
  4. 当VS停止在断点-启动filemon.exe
  5. 在VS中按F5(继续执行)
  6. 当异常引发时-暂停filemon.exe并开始分析文件
  7. 发生了什么

为了简化调查,您可以根据文件或进程名在filemon中设置过滤器好运!

相关文章: