C# 使用c在文件中保存combox值#
我正在编写一个小程序,它显示我的待办事项、优先级等。在这个程序中,我有两个选项卡:选项卡1用于创建新的待办事项,另一个选项卡用于显示当前的待办事项。因此,当我在选项卡1的文本框中输入一些文本,并单击“保存”按钮后,它应该将其保存在选项卡2的组合框中。当我重新启动程序时,它仍然应该被保存。谷歌让我用一个文件来做这件事,这样我就可以把它保存到一个文件中。我发现了一个简短的代码,我根据我的程序进行了调整。在这里您可以看到我的代码:C# 使用c在文件中保存combox值#,c#,combobox,textbox,streamreader,C#,Combobox,Textbox,Streamreader,我正在编写一个小程序,它显示我的待办事项、优先级等。在这个程序中,我有两个选项卡:选项卡1用于创建新的待办事项,另一个选项卡用于显示当前的待办事项。因此,当我在选项卡1的文本框中输入一些文本,并单击“保存”按钮后,它应该将其保存在选项卡2的组合框中。当我重新启动程序时,它仍然应该被保存。谷歌让我用一个文件来做这件事,这样我就可以把它保存到一个文件中。我发现了一个简短的代码,我根据我的程序进行了调整。在这里您可以看到我的代码: private void Form1_Load(object send
private void Form1_Load(object sender, EventArgs e)
{
// Check if directory exists
if (Directory.Exists(@"C:\Users\rs\Desktop\Test\)"))
{
// Do nothing
}
else
{
Directory.CreateDirectory(@"C:\Users\rs\Desktop\Test\");
}
if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
{
// Do nothing
}
else
{
File.Create(@"C:\Users\rs\Desktop\Test\test.txt");
}
StreamReader sr = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt");
while (sr.Peek() >= 0)
{
combox_Name2.Items.Add(sr.ReadLine());
}
sr.Close();
}
private void btn_Save_Click(object sender, EventArgs e)
{
StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);
try
{
Process.Start(combox_Name2.Text, txt_Name.Text);
if (combox_Name2.Items.Contains(txt_Name.Text))
{
// Do nothing
}
else
{
writer.WriteLine(combox_Name2.Text);
writer.Flush();
writer.Dispose();
combox_Name2.Items.Add(txt_Name.Text);
}
}
catch
{
MessageBox.Show("The file '" + txt_Name.Text + "' could not be located", "File could not be located");
}
}
我现在的问题是:每次我启动程序,在文本框中输入一些文本,然后点击保存按钮,就会出现一个错误
StreamReader sr=newstreamreader(@“C:\Users\rs\Desktop\Test\Test.txt”)代码>
VS2012表示进程无法进入C:\Users\rs\Desktop\Test\Test.txt
,因为它已在另一个进程中启动
有人能给我一个提示吗
CheersStreamWriter阻止您这样做,您必须在流程中使用文件之前关闭它,或者您必须在字符串中进行更改,而不是在流程存在时更新文件中的更改。StreamWriter阻止您这样做,您必须在流程中使用文件之前关闭它,或者您必须在字符串,然后在进程存在时更新对文件的更改。您忘记关闭/处置写入程序。这对读者也很重要。你应该习惯这样写:
using(StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
// do your thing here.
}
StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);
try
{
// do your thing here.
}
finally
{
writer.Dispose();
}
这将始终关闭流,即使在内部抛出异常时也是如此
这将按如下方式进行编译:
using(StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
// do your thing here.
}
StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);
try
{
// do your thing here.
}
finally
{
writer.Dispose();
}
实际问题在于:File.Create(@“C:\Users\rs\Desktop\Test\Test.txt”)强>
文件已创建,但您没有引用结果。声明公共静态文件流创建(
字符串路径
)
这会将结果(FileStream)发送到垃圾中,并在垃圾回收器收集时进行处理。你不知道这是什么时候发生的。该文件将保持打开状态,直到垃圾收集完毕。您可以删除整个行。如果文件不存在,请不要执行StreamReader部分
combox_Name2.Items.Clear();
if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
{
using(StreamReader sr = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt"))
{
while (sr.Peek() >= 0)
{
combox_Name2.Items.Add(sr.ReadLine());
}
}
}
别忘了取下盖子!在文件.Exists处。您忘记关闭/处置写入程序。这对读者也很重要。你应该习惯这样写:
using(StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
// do your thing here.
}
StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);
try
{
// do your thing here.
}
finally
{
writer.Dispose();
}
这将始终关闭流,即使在内部抛出异常时也是如此
这将按如下方式进行编译:
using(StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
// do your thing here.
}
StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);
try
{
// do your thing here.
}
finally
{
writer.Dispose();
}
实际问题在于:File.Create(@“C:\Users\rs\Desktop\Test\Test.txt”)强>
文件已创建,但您没有引用结果。声明公共静态文件流创建(
字符串路径
)
这会将结果(FileStream)发送到垃圾中,并在垃圾回收器收集时进行处理。你不知道这是什么时候发生的。该文件将保持打开状态,直到垃圾收集完毕。您可以删除整个行。如果文件不存在,请不要执行StreamReader部分
combox_Name2.Items.Clear();
if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
{
using(StreamReader sr = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt"))
{
while (sr.Peek() >= 0)
{
combox_Name2.Items.Add(sr.ReadLine());
}
}
}
别忘了取下盖子!在.Exists文件中。始终将实现IDisposable接口的对象放置在
using(IDisposable object goes here)
{
// Do something.
}
在您的例子中,StreamWriter对象。始终将实现IDisposable接口的对象放置在
using(IDisposable object goes here)
{
// Do something.
}
在您的情况下,StreamWriter对象。以下代码将实现您的目标。如果有效的话,做标记作为答案
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace FileHandling
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Check if directory exists
if (Directory.Exists(@"C:\Users\rs\Desktop\Test\)"))
{
// Do nothing
}
else
{
Directory.CreateDirectory(@"C:\Users\rs\Desktop\Test\");
}
if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
{
// Do nothing
}
else
{
File.Create(@"C:\Users\rs\Desktop\Test\test.txt");
}
using (StreamReader writer = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt"))
{
while (writer.Peek() >= 0)
{
combox_Name2.Items.Add(writer.ReadLine());
}
writer.Close();
}
}
private void btn_Save_Click(object sender, EventArgs e)
{
using (StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
try
{
if (combox_Name2.Items.Contains(txt_Name.Text))
{
MessageBox.Show("The task '" + txt_Name.Text + "' already exist in list", "Task already exists");
}
else
{
combox_Name2.Items.Add(txt_Name.Text);
writer.WriteLine(txt_Name.Text);
writer.Flush();
writer.Dispose();
}
}
catch
{
MessageBox.Show("The file '" + txt_Name.Text + "' could not be located", "File could not be located");
}
}
}
}
}
以下代码将实现您的目标。如果有效的话,做标记作为答案
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
namespace FileHandling
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Check if directory exists
if (Directory.Exists(@"C:\Users\rs\Desktop\Test\)"))
{
// Do nothing
}
else
{
Directory.CreateDirectory(@"C:\Users\rs\Desktop\Test\");
}
if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
{
// Do nothing
}
else
{
File.Create(@"C:\Users\rs\Desktop\Test\test.txt");
}
using (StreamReader writer = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt"))
{
while (writer.Peek() >= 0)
{
combox_Name2.Items.Add(writer.ReadLine());
}
writer.Close();
}
}
private void btn_Save_Click(object sender, EventArgs e)
{
using (StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
{
try
{
if (combox_Name2.Items.Contains(txt_Name.Text))
{
MessageBox.Show("The task '" + txt_Name.Text + "' already exist in list", "Task already exists");
}
else
{
combox_Name2.Items.Add(txt_Name.Text);
writer.WriteLine(txt_Name.Text);
writer.Flush();
writer.Dispose();
}
}
catch
{
MessageBox.Show("The file '" + txt_Name.Text + "' could not be located", "File could not be located");
}
}
}
}
}
如果(!File.Exists(@“C:\Users\rs\Desktop\Test\Test.txt”)
导致不存在(
),什么都不做就什么都不做:)谢谢我编辑了我的代码,所以没有//不再做任何事了:)但这不是原因:如果(!File.Exists(@“C:\Users\rs\Desktop\Test\Test\Test.txt”)
导致不存在(
),什么都不做什么也不做:)谢谢我编辑了我的代码,这样就没有了//什么都不做了:)但这不是原因:o^^谢谢你的回答。我还是会出错:/也许我做错了什么?如果我使用using(StreamWriter writer=newstreamwriter(@“C:\Users\rs\Desktop\Test\Test.txt”,true)){//在这里做你的事。}
我必须将try
放入{}
中。这是正确的吗?请耐心点,我是新手:)不,你不需要在那里写试试,除非你想在那里处理异常。如果将try
放入{}
中,则可以在文件仍处于打开状态时处理异常。如果使用(…)
将try放在之外,则在处理异常时文件将关闭。因此使用
不会处理异常,但在离开{}
范围之前总是调用内部对象的dispose
,但是如果我使用使用
,我就不能使用writer.WriteLine(combox\u Name2.text)代码>例如,因为StreamWriter writer
位于()
中。我就是不明白。阅读:使用语句(C#Reference)是的,该语句帮助我理解了使用以及我现在理解的另一个答案的原因我在哪里犯了错误。谢谢你的支持:)谢谢你的回答。我还是会出错:/也许我做错了什么?如果我使用using(StreamWriter writer=newstreamwriter(@“C:\Users\rs\Desktop\Test\Test.txt”,true)){//在这里做你的事。}
我必须将try
放入{}
中。这是正确的吗?请耐心点,我是新手:)不,你不需要在那里写试试,除非你想在那里处理异常。如果将try
放入{}
中,则可以在文件仍处于打开状态时处理异常。如果使用(…)
将try放在之外,则在处理异常时文件将关闭。因此,使用
的不会处理异常,而是在离开作用域{}dispose