gpt4 book ai didi

c# - 如何保证多个文件IO操作成功?

转载 作者:行者123 更新时间:2023-11-30 22:45:04 25 4
gpt4 key购买 nike

我正在编写一个应用程序,用于对文件进行分类并通过 sidecar 文件将元数据与文件一起保存。我正在尝试添加文件 IO 操作,以便用户可以通过我的应用程序操作(复制、重命名、移动、删除等),这反过来也会操作 sidecar 文件。

但是,我担心在某些情况下,一个 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;}
}

最佳答案

Windows Vista 和更高版本上确实存在文件系统事务(仅限 NTFS;不支持 FAT)。

对此没有直接托管的 API(andyp 引用的优秀 article 使用 p/Invoke)。我已请求将它添加到 Windows API 代码包中;你可以给请求投票 here .

关于c# - 如何保证多个文件IO操作成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3216499/

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