Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复';System.IO.IOException:&x27;进程无法访问文件';_C# - Fatal编程技术网

C# 如何修复';System.IO.IOException:&x27;进程无法访问文件';

C# 如何修复';System.IO.IOException:&x27;进程无法访问文件';,c#,C#,我想知道如何在没有System.IO.IOException的情况下删除文件 它一直在说 “System.IO.IOException:'进程无法访问文件'C:\A1\AccNum.txt',因为它正被另一个进程使用。” private static void deleteCount() { int accountNum2; string accountVar=string.Empty; 常量int MaxLength=10; 弦线2; Console.WriteLine(“删除帐户”); Co

我想知道如何在没有System.IO.IOException的情况下删除文件 它一直在说 “System.IO.IOException:'进程无法访问文件'C:\A1\AccNum.txt',因为它正被另一个进程使用。”

private static void deleteCount()
{
int accountNum2;
string accountVar=string.Empty;
常量int MaxLength=10;
弦线2;
Console.WriteLine(“删除帐户”);
Console.WriteLine(“============================”);
Console.WriteLine(“输入详细信息”);
控制台。写线(“”);
WriteLine(“帐号:{0}”,accountVar);
accountVar=Console.ReadLine();
Console.WriteLine(“============================”);
尝试
{
accountNum2=转换为32(accountVar);
}
捕获(溢出例外)
{
WriteLine(“错误为{0}:”,ex);
}
最后
{
如果(accountVar.Length5)
{
System.IO.StreamReader file=new System.IO.StreamReader(@“C://A1//AccNum.txt”);
而((line2=file.ReadLine())!=null)
if(第2行包含(accountVar))
{
Console.WriteLine(“找到帐户!下面显示详细信息…”);
string text2=File.ReadAllText(@“C://A1//AccNum.txt”);
控制台写入线(text2);
Console.WriteLine(“============================”);
控制台。写线(“”);
控制台。写入(“删除?(y/n):”;
字符串应答器2;
answer2=Console.ReadLine();
如果((回答2.包含(“y”)| |回答2.包含(“y”))
{
if(File.Exists(@“C://A1//AccNum.txt”))
{
File.Delete(@“C://A1//AccNum.txt”);//此部分表示它有“System.IO.IOException:”进程无法访问文件“C:\A1\AccNum.txt”,因为它正被另一个进程使用。“”
}
控制台。写入(“帐户已删除!”);
Console.Read();
showmain菜单();
打破
}

您自己正在使用该文件(使用读卡器),除非停止使用,否则无法删除该文件

关闭if块内的读卡器,然后尝试删除该文件

使用File.ReadAllText时,您不需要关闭任何内容(以及文件的其他静态成员),但对于StreamReader,您需要自己关闭流


另外,你还应该重构你的代码,因为它有缺陷。

你自己正在使用这个文件(使用读卡器),除非你停止使用它,否则你不能删除它

关闭if块内的读卡器,然后尝试删除该文件

使用File.ReadAllText时,您不需要关闭任何内容(以及文件的其他静态成员),但对于StreamReader,您需要自己关闭流


另外,您还应该重构代码,因为它有缺陷。

AccNum.txt文件会被您的代码打开两次。当您打开文件时,同时尝试删除触发IOException的文件

如果要删除文件,请确保没有其他程序打开您的文件。您不可能已经打开了要删除的文件的文件句柄。在您的程序中,您是在删除文件时打开文件的人。因此,请先释放文件句柄

 if (File.Exists(@"C://A1//AccNum.txt"))
 {
     // file is your StreamReader.
     file.Close();
     file.Dispose();
     File.Delete(@"C://A1//AccNum.txt"); 
 }

另外请注意,如果在文件中找到
accountVar
,您将打开同一个文件2次或多次。更好的选择是只打开一个
文件。ReadAllText()
调用并使用该内容。

AccNum.txt文件由您的代码打开两次。当您打开该文件时,同时尝试删除触发IOException的文件

如果要删除文件,请确保没有其他程序打开您的文件。您不可能已经打开了要删除的文件的文件句柄。在您的程序中,您是在删除文件时打开文件的人。因此,请先释放文件句柄

 if (File.Exists(@"C://A1//AccNum.txt"))
 {
     // file is your StreamReader.
     file.Close();
     file.Dispose();
     File.Delete(@"C://A1//AccNum.txt"); 
 }

另外请注意,如果在文件中找到
accountVar
,您将打开同一个文件2次或多次。更好的选择是只打开一个
文件。ReadAllText()
调用并使用该内容。

您的
StreamReader
仍然打开该文件。该代码总体上不是很清楚,您不断地重复读取同一文件,同时保持另一个读取器打开该文件。您真的需要读取同一文件多少次?该代码到底要做什么?看起来很像就像您根本不需要或不想要
StreamReader
一样。您可以将整个文件读入内存(使用
ReadAllText
ReadAllLines
或任何类似功能)然后对内存中的数据执行所有逻辑。这样,您就不会打开任何文件句柄,可以随时删除它。其他答案说明了为什么会出现异常,但我也建议您重新思考/重构该方法的工作方式,特别是从
最终中的代码量的角度e> block-这里面可能有很多错误。也就是说,如果你采纳其他人的建议,那么我希望你的方法会更小/更简单。在处理文件时始终使用using语句。你的
StreamReader
仍然打开文件。这段代码总体上不是很清楚,你会继续阅读一次又一次地打开同一个文件,同时保持另一个读卡器打开该文件。您真正需要打开多少次