[英]c# exception file is being used by another 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(),但这不是很有效。 我希望有人可以提供帮助。
谢谢
托斯滕
是否从多个线程调用该函数? 如果是,则可能要在类级别上声明一个静态对象,并在该方法的整个主体周围放置一个锁语句。 像这样:
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或类似工具检查您是否已在文本编辑器中打开该文件或类似文件。
编辑您可以评论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之前,在StreamReader之后但在StreamWriter之前打开该文件的独占FileStream吗? http://msdn.microsoft.com/de-de/library/tyhc0kft%28v=vs.110%29.aspx
还可以尝试为该方法使用另一个文件吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.