C# 接收到一个异常,告诉我代码中使用的文件正被另一个进程使用?
在我编写的代码中,作为异常处理的实践,您输入了两个数字。如果发生异常,它会将其写入log.txt;如果发生内部异常(如该文件不存在),它会创建日志文件,然后写入。代码如下:C# 接收到一个异常,告诉我代码中使用的文件正被另一个进程使用?,c#,exception,C#,Exception,在我编写的代码中,作为异常处理的实践,您输入了两个数字。如果发生异常,它会将其写入log.txt;如果发生内部异常(如该文件不存在),它会创建日志文件,然后写入。代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApplication21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ConsoleApplication21
{
class Program
{
static void Main(string[] args)
{
try
{
try
{
Console.WriteLine("Please enter your numerator!");
int numerator = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Please enter your denominator!");
int denominator = Convert.ToInt32(Console.ReadLine());
int Result = numerator / denominator;
Console.WriteLine("The result of the division of the two numbers {0} and {1} is: {2}", numerator, denominator, Result);
}
catch (FormatException formex)
{
Console.WriteLine("Error format exception detected!");
}
catch (Exception ex)
{
if (File.Exists(@"C:\test files\log.txt"))
{
string dump = @"C:\test files\log.txt";
StreamWriter Streamwriter = new StreamWriter(dump);
Console.WriteLine("An unknown exception was detected and an error log has been dumped at {0}!", dump);
Streamwriter.WriteLine(ex.Message);
Streamwriter.WriteLine(ex.StackTrace);
Streamwriter.Close();
}
else
{
throw new FileNotFoundException("Error file was not found!!!");
}
}
}
catch(FileNotFoundException filex)
{
Console.WriteLine("Error: log file not found! Creating file!");
File.Create(@"C:\test files\log.txt");
StreamWriter StreamWriter = new StreamWriter(@"C:\test files\log.txt");
StreamWriter.WriteLine(filex.GetType().Name);
StreamWriter.WriteLine(filex.InnerException.GetType().Name);
StreamWriter.Close();
}
}
}
}
但是,当我运行代码并通过删除txt并强制程序创建一个新文件来测试文件创建系统时,我得到一个异常,告诉我“进程无法访问该文件,因为它正被另一个进程使用”此外,由于此异常,错误不会写入log.txt,它只会生成一个空白文本文件。据我观察,这背后的原因是代码末尾的Streamwriter类导致了错误。出于某种原因,即使在创建文件后仍运行File.Create行时,由于某种原因,该行仍保留该文件,因此不允许StreamWriter打开并写入该文件。如何修复此问题?按如下方式修改代码,File.Create中的文件流在代码中仍然没有关闭。因此,您得到了错误
catch (FileNotFoundException filex) {
Console.WriteLine("Error: log file not found! Creating file!");
using (var fileStream = File.Create(@"C:\test files\log.txt")) {
using (var streamWriter = new StreamWriter(fileStream)) {
streamWriter.WriteLine(filex.GetType().Name);
streamWriter.WriteLine(filex.InnerException.GetType().Name);
}
}
}
如果您在某处打开了文件以查看详细信息,并且您的程序试图写入该文件,您将得到该异常,因为它无法锁定该文件。我在Windows7上也观察到类似的行为,你关闭了文件,但不知何故操作系统仍然锁定了它,你的程序需要几秒钟才能锁定它。我建议的一件事是在steam编写器上使用block,它会在最后自动刷新缓冲区
if (File.Exists(@"C:\test files\log.txt"))
{
string dump = @"C:\test files\log.txt";
using(StreamWriter Streamwriter = new StreamWriter(dump))
{
Console.WriteLine("An unknown exception was detected and an error log has been dumped at {0}!", dump);
Streamwriter.WriteLine(ex.Message);
Streamwriter.WriteLine(ex.StackTrace);
Streamwriter.Close();
}
}
Create方法已经为您提供了一个文件流,您正在尝试创建一个新的文件流。您应该使用file.Create方法返回的文件流
using (FileStream fs = File.Create(path))
{
//you can use the filstream here to write to file
}