收到一个异常,告诉我代码中使用的文件正被另一个进程使用
本文关键字:文件 进程 另一个 代码 告诉我 异常 一个 | 更新日期: 2023-09-27 18:00:57
在我为异常处理而编写的代码中,您输入了两个数字。如果发生异常,它会将其写入log.txt,如果发生内部异常(如不存在的文件(,它会创建日志文件,然后写入其中。以下是代码:
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中的fileStream在代码中仍然没有关闭。因此,您会得到错误。
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);
}
}
}
如果你在某个地方打开了文件来查看详细信息,而你的程序试图向它写入,你会遇到异常,因为它无法锁定它。我在windows 7上观察到了类似的行为,你关闭了文件,但不知怎的操作系统仍然锁定了它,你的程序需要几秒钟才能锁定它。我建议的一件事是在你的蒸汽写入器上使用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();
}
}
File.Create方法已经为您提供了一个文件流,您正在尝试创建一个新的文件流。您应该使用file.Create方法返回的文件流。
using (FileStream fs = File.Create(path))
{
//you can use the filstream here to write to file
}