c# - 如何实现 "retry/abort"写入可能被其他进程使用的文件的机制?

标签 c# try-catch .net-4.5

这是一个非常简短的问题。我完全不明白 try-catch 机制。

这是我当前的代码:

public static void WriteText(string filename, string text)
{
    try
    {
        System.IO.StreamWriter file = new System.IO.StreamWriter(filename);
        file.Write(text);
        file.Close();
    }
    catch(Exception exc)
    {
        MessageBox.Show("File is probably locked by another process.");
    }
}

背景:

我正在编写与另一个应用程序共享配置文件的应用程序。

当其他应用程序使用该文件时,我需要一些带有“重试”和“中止”按钮的对话框消息框。当该消息出现时 - 我将关闭其他应用程序,然后我将尝试通过按“重试”按钮再次重写该文件。

最佳答案

我们所拥有的是使用计数器进行重试,并可能使用线程休眠。

有点像

int tries = 0;
bool completed = false;
while (!completed)
{
    try
    {
        System.IO.StreamWriter file = new System.IO.StreamWriter(filename);
        file.Write(text);
        file.Close();
        completed = true;
    }
    catch(Exception exc)
    {
        tries++;
        //You could possibly put a thread sleep here
        if (tries == 5)
            throw;
    }
}

关于c# - 如何实现 "retry/abort"写入可能被其他进程使用的文件的机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704613/

相关文章:

winforms - 在 Winforms 中支持 SQL Server 2008 R2 和 2012 的 SQL Server 管理对象

c# - 库代码中的一次性资源

c# - 实体模型中可以使用私有(private) setter 吗?

java - while true try catch 嵌套

java - 未捕获 SQLiteConstraintException

c# - 寻找.NET 4.5 Progress <T>源代码

c# - 如何在 Asp.Net mvc 5 的 grid.mvc 中添加两个按钮

c# - 如何将密码StandardInput传递给pg_dump?

flutter - 如何捕捉 "Unable to load asset: assets/images/sample_img_url.png"

.net - .NET Framework 4.5 是否提供 SSE4/AVX 支持?