我编写了一个应用程序,它接受一个未压缩的.wav文件并编码为flac文件,mp3文件和aac文件。 flac和mp3工作正常,但在进行aac编码时(使用Nero AAC encoder)我随机获取有关正在使用的文件的IOExceptions。有时 - 但不是经常 - 在文件生成时发生 - 我的进程创建的文件如何被另一个文件使用?但更常见的是,当我使用TagLib编写元标记时,我得到了错误。因此,我修复了代码,在IO错误时对有问题的文件运行sysinternal's 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;
}
答案 0 :(得分:1)
我建议您使用其他SysInternals工具 - filemon.exe
为了简化调查,您可以按文件或进程名称在filemon中设置过滤器 祝你好运!