我有一个方法可以将文本从文本框保存到txt文件中,但每次退出SaveFileDialog时都会收到System.IO.IOException错误。
static OpenFileDialog ofd = new OpenFileDialog();
static SaveFileDialog sfd = new SaveFileDialog();
static String cp;
private void SaveClass() {
sfd.DefaultExt = "txt";
sfd.Filter = "Text Files | *.txt";
if (sfd.ShowDialog() == DialogResult.OK) {
cp = sfd.FileName;
File.Create(cp);
File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
}
}
Visual Studio突出显示以“File.WriteAllLines”开头的代码,并说这是我收到错误的地方。感谢。
确切的错误消息:
mscorlib.dll中出现未处理的“System.IO.IOException”类型异常
其他信息:进程无法访问文件'C:\ Users \ ktfjulien \ Documents \ poop.txt',因为它正被另一个进程使用。
编辑: 谢谢,我不再收到错误消息,但是我保存到文本框中的所有内容都写在一行上,无论文本是否由新行分隔。
答案 0 :(得分:3)
您无需执行File.Create(cp);
即可写入文件。这是错误的原因。相反,直接做:
cp = sfd.FileName;
FileStream fs = File.OpenWrite(cp);
如果您想使用StreamWriter
代替FileStream
,请使用FileStream
作为StreamWriter
的输入
StreamWriter sw = new StreamWriter(fs);
或者,您也可以在展示时直接使用File.WriteAllLines
- 不要使用File.Create
:
if (sfd.ShowDialog() == DialogResult.OK) {
cp = sfd.FileName;
//File.Create(cp); //remove this
File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
}
答案 1 :(得分:1)
当您使用File.Create()
创建文件时File.Create()
已使用此文件,您需要在使用其他位置之前关闭该文件,以便在将文本写入文件关闭文件编写器之前
var file = File.Create(cp);
file.Close();
完整的工作解决方案
static OpenFileDialog ofd = new OpenFileDialog();
static SaveFileDialog sfd = new SaveFileDialog();
static String cp;
private void SaveClass()
{
sfd.DefaultExt = "txt";
sfd.Filter = "Text Files | *.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
cp = sfd.FileName;
var file = File.Create(cp);
file.Close();
File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
}
}
答案 2 :(得分:1)
您无需创建文件,File.WriteAllLines
将为您执行此操作(或清除文件(如果存在)):
private void SaveClass() {
sfd.DefaultExt = "txt";
sfd.Filter = "Text Files | *.txt";
if (sfd.ShowDialog() == DialogResult.OK)
File.WriteAllLines(sfd.FileName, StudentTextBox.Text
.Split(new String[] { Environment.NewLine },
StringSplitOptions.RemoveEmptyEntries));
}