C# “如何修复”;由另一个过程使用;编辑使用Process.Start()打开的文本文件时出错?
我正在用c#制作一个控制台应用程序。我使用了C# “如何修复”;由另一个过程使用;编辑使用Process.Start()打开的文本文件时出错?,c#,editing,process.start,C#,Editing,Process.start,我正在用c#制作一个控制台应用程序。我使用了Process.Start()函数来打开一个文本文件,可以在记事本中直接编辑该文件,程序会等待记事本关闭。但当试图保存文件时,会弹出一条警告消息,说“文件正被另一个进程使用” 由于我是初学者,我不知道如何解决这个问题。我知道FileAccess,FileMode,FileStream,但我从未使用过它们,也不认为它们在这一点上会有所帮助 这是Main()方法之前的构造函数 以及使用此构造函数的Main()方法的一部分 TextFi
Process.Start()
函数来打开一个文本文件,可以在记事本中直接编辑该文件,程序会等待记事本关闭。但当试图保存文件时,会弹出一条警告消息,说“文件正被另一个进程使用”
由于我是初学者,我不知道如何解决这个问题。我知道FileAccess
,FileMode
,FileStream
,但我从未使用过它们,也不认为它们在这一点上会有所帮助
这是Main()方法之前的构造函数
以及使用此构造函数的Main()方法的一部分
TextFileWriting:
AccountApplication openFile;
Console.Clear();
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Enter a file name: ");
string filename = Console.ReadLine();
if (filename == "")
{
goto TextFileWriting;
}
textFilePath = Path.Combine(currentUserFolder, filename + ".txt");
if (File.Exists(textFilePath))
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("File You specified already has been created. Do you want to overwrite or edit it? (edit/overwrite)");
string userAnswer = Console.ReadLine();
if (userAnswer == "edit")
{
openFile = new AccountApplication();
goto MainMenu;
}
else if (userAnswer == "overwrite")
{
File.CreateText(textFilePath);
openFile = new AccountApplication();
goto MainMenu;
}
else if (userAnswer == "")
{
goto TextFileWriting;
}
}
else if (!File.Exists(textFilePath))
{
File.CreateText(textFilePath);
openFile = new AccountApplication();
goto MainMenu;
}
记事本打开了,程序正在等待它关闭。用户无法做的一件事是保存所做的更改。下面的一行为您创建了一个
StreamWriter
:
File.CreateText(textFilePath);
其用途如下:
using (var writer = File.CreateText(textFilePath))
{
writer.WriteLine("Hi!");
};
如果不想向文件写入任何内容,请立即关闭StreamWriter
:
File.CreateText(textFilePath).Close();
大多数文本编辑器在工作完成后创建临时文件。当您必须保存时,他们会根据这样的临时文件创建文件。这使他们能够防止在文件无法保存或程序意外关闭时丢失所做的任何工作。他们可以从临时文件中恢复工作,并在“文件被另一个进程使用”时提供选项。记事本不会锁定文件,所以其他应用程序(您的)会锁定该文件吗?正在打开文件。在这种情况下,记事本无法保存文件。文件是从哪里来的?它是如何创建的?顺便问一下,为什么要测试
文件.Exists
和!是否在同一个中存在?如果您有并发性问题,这不是如何处理它们,如果没有,就没有理由再次测试,这就是If
…else
的意思。为什么要用不同的变量名多次调用newaccountapplication()
,并将结果丢弃?这不是您应该如何使用类或对象…@NetMage首先,应用程序要求用户输入文件名。然后,程序检查文件是否存在。否则,程序将创建一个新文件并打开它<代码>如果
和否则
问题是复制错误。现在它被纠正了。我还修复了newaccountapplication()
调用。编辑创建的文本文件的最佳方式是什么?是否只有在创建新文件时才会出现错误?我没有注意到您没有正确处理从File.CreateText
返回的文件,因此您正在打开该文件而从未关闭它。您需要执行File.CreateText().Close()代码>。
File.CreateText(textFilePath).Close();