我正在编写一个应用程序,它通过sidecar文件编目并保存元数据。我正在尝试添加文件IO操作,以便用户可以通过我的应用程序来操作(复制,重命名,移动,删除等),然后操纵边车文件。如何确保多个文件IO操作成功?
但是,我担心在某些情况下,一个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;}
}