gpt4 book ai didi

c# - 即使调用应用程序关闭,删除功能也会删除

转载 作者:太空狗 更新时间:2023-10-29 21:45:57 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题(这可能是我缺乏知识),我展示了有问题的代码:

try
{
f.Delete();
fTemp.MoveTo(f.FullName);
Console.WriteLine("INFO: Old file deleted new file moved in > {0}", f.FullName);
}
catch (IOException ex)
{
Console.WriteLine("ERROR: Output file has IO exception > {0}", f.FullName);
Environment.ExitCode = 1;
}

f 和 fTemp 是 FileInfo 对象。因此,如果我使用代码运行它,其中 f 是在媒体播放器中播放的视频文件,它会抛出异常。效果很好,符合预期。现在,当我关闭媒体播放器时,它会删除文件!?即使我的应用程序已关闭很长时间。即使我关闭 Visual Studio,它仍然会在我关闭媒体播放器时删除该文件。好像在某处设置了一些回调以确保文件在某个时候被删除。这种不受欢迎的行为。但我不知道到底出了什么问题......

现在的结果:

if (!IsFileLocked(f))
{
try
{
f.Delete();
fTemp.MoveTo(f.FullName);
Console.WriteLine("INFO: Old file deleted new file moved in > {0}", f.FullName);
}
catch (IOException ex)
{
Console.WriteLine("ERROR: Output file has IO exception > {0}", f.FullName);
Environment.ExitCode = 1;

}

catch (UnauthorizedAccessException ex)
{
Environment.ExitCode = 2;
Console.WriteLine("ERROR: Output file is locked > {0}", f.FullName);

}
}
else
{
Environment.ExitCode = 3;
Console.WriteLine("ERROR: Couldn't delete file was locked");

}

我知道我仍然可以在 Delete 和 MoveTo 之间做得更好,但我现在将进行更改,shotgun 编码......

最佳答案

您将收到 IOException,因为无法立即删除或写入文件。但是,当您调用 Delete() 时,似乎正在调用文件以进行删除。

虽然媒体播放器在文件打开时阻止文件被删除,但文件在关闭时仍被标记为删除,无论您的程序是否正在运行。因此,当媒体播放器关闭时,文件将被删除。

您可以使用以下代码检查文件是否正在使用,代码取自 here .使 DeleteCopy 以未被锁定为条件,你应该没问题。

try
{
if(!IsFileLocked(f))
{
f.Delete();
fTemp.MoveTo(f.FullName);
Console.WriteLine("INFO: Old file deleted new file moved in > {0}", f.FullName);
}
}

protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;

try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}

//file is not locked
return false;
}

关于c# - 即使调用应用程序关闭,删除功能也会删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11761877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com