我正在编写一个应用程序,通过sidecar文件对文件进行编目并保存元数据。我正在尝试添加文件IO操作,以便用户可以通过我的应用程序进行操作(复制,重命名,移动,删除等等),这也会操纵边车文件。
但是,我担心在某些情况下,一个IO操作将针对一个文件而不是另一个文件完成,从而使文件处于不一致状态。所以我想找出一种方法,可以确保所有IO操作都完成。
首先有一些方法可以确保IO操作成功吗?我当然可以测试File.Exists
。但是还存在其他潜在的问题,例如文件的可访问性,它是只读状态,或者被另一个用户锁定,甚至进一步复杂化了。即使我最终测试所有可能的问题,仍然存在这样的可能性,但是可能的话,在尝试测试和实际IO操作之间的时间内文件将发生变化。假设文件在File.Exists(somefile.txt)
和File.Copy(somefile.txt,somefile2.txt)
之间被删除。
或者我也在考虑创建一组表示文件IO操作的类,但是在执行操作后可以选择撤消。这样我的程序可以尝试多个IO操作,但是如果一个操作最终失败,以后能够轻松恢复所有更改。请参阅下面的界面。
这似乎是更好的选择,但我想听听其他意见。
public enum IOActionStatus {Not Run, Successful, Failed}
public interface
{
public bool Go();
public void Undo();
public IOActionStatus Status;
}
public class CopyFileAction:IOAction
{
public Copy File Action(string sourcepath, string destPath)
{
}
public bool Go()
{
//attempts to to copy file
}
public void Undo()
{
//deletes the copied file if Go() was successful
}
public IOActionStatus Status{get; private set;}
}