c#异常文件正由另一个进程使用

时间:2013-11-30 10:51:44

标签: c# file exception process

我遇到以下两个功能的问题。两者都有一个简单的基本方案,但第一个工作,第二个工作在标记行导致异常(“文件由另一个进程使用”)。

    // this works
    public static void EncryptFile(string FileName)
    {
        string ToEncrypt = null;

        using(StreamReader sr = new StreamReader(FileName))
        {
            ToEncrypt = sr.ReadToEnd();
        }
        using(StreamWriter sw = new StreamWriter(FileName, false))
        {
            string Encrypted = Encrypt(ToEncrypt, true);
            sw.Write(Encrypted);
        }
    }
    // this works not - see commented lin
    public static void DecryptFile(string FileName)
    {
        string ToDecrypt = null;

        using (StreamReader sr = new StreamReader(FileName))
        {
            ToDecrypt = sr.ReadToEnd();
        }
        // here comes the exception
        using (StreamWriter sw = new StreamWriter(FileName, false))
        {
            string Decrypted = Decrypt(ToDecrypt, true);
            sw.Write(Decrypted);
        }
    }

我在读取和写入后尝试使用额外的Close(),但这也不行。 我希望,有人可以提供帮助。

由于

的Torsten

1 个答案:

答案 0 :(得分:0)

是从多个线程调用的函数吗?如果是,您可能希望在类级别声明一个静态对象,并在该方法的整个主体周围放置一个锁定语句。像这样:

private static Object syncObject = new Object()
// this works not - see commented lin
public static void DecryptFile(string FileName)
{
    lock(syncObject)
    {
        string ToDecrypt = null;

        using (StreamReader sr = new StreamReader(FileName))
        {
            ToDecrypt = sr.ReadToEnd();
        }
        // here comes the exception
        using (StreamWriter sw = new StreamWriter(FileName, false))
        {
            string Decrypted = Decrypt(ToDecrypt, true);
            sw.Write(Decrypted);
        }
    }
}

也可以,只是为了好玩,评论StreamReader语句并尝试再次运行该方法?如果它仍然不起作用,请使用ProcessExplorer或类似的东西检查您是否在texteditor或类似的东西中打开该文件。

修改 你能评论StreamReader部分吗?所以它看起来像这样:

 public static void DecryptFile(string FileName)
 {

    //string ToDecrypt = null;

    //using (StreamReader sr = new StreamReader(FileName))
    //{
     //   ToDecrypt = sr.ReadToEnd();
    //}
    // here comes the exception
    using (StreamWriter sw = new StreamWriter(FileName, false))
    {
        string Decrypted = Decrypt(ToDecrypt, true);
        sw.Write(Decrypted);
    }

}

您是否也可以尝试在StreamReader之前打开该文件的独占FileStream,在StreamReader之后但在StreamWriter之前打开一次? http://msdn.microsoft.com/de-de/library/tyhc0kft%28v=vs.110%29.aspx

您也可以尝试使用该方法的其他文件吗?