我正在制作一个音乐播放器。它有两种形式;一个是你演奏音乐的主要区域。第二种形式有一个CheckedListBox,您可以在其中选择所需的mp3。 当我单击一个按钮时,它会将选择保存在.txt文件中,以便我可以在第一种形式中访问它们,我将把字符串放入音乐播放器的路径中以查找文件。
这是我的第二种形式的代码,我将所选歌曲保存为.txt文件。
private void selectbtn_Click(object sender, EventArgs e)
{
if (File.Exists(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt"))
{
File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", String.Empty);
}
string[] checkedtitles = new string[checkedListBox1.CheckedItems.Count];
for (int ii = 0; ii < checkedListBox1.CheckedItems.Count; ii++)
{
checkedtitles[ii] = checkedListBox1.CheckedItems[ii].ToString();
}
string selectedSongs = String.Join(Environment.NewLine, checkedtitles);
songRecord.writeRecord(selectedSongs); //I initialised the class containing streamwriter/reader, and called it songRecord
this.Close();
}
问题是,每当我关闭程序并再次打开它时,我都无法重写/清除.txt文件。它只是添加到现有文件。我有什么不对的吗?
这是我的streamreader / writer代码。我很确定我在跑步后也关闭它,但也许有人可以弄清楚错误:
namespace songss
{
class DataRecord
{
public void writeRecord(string line)
{
StreamWriter sw = null;
try
{
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
}
catch (FileNotFoundException)
{
Console.WriteLine("Error: File not found.");
}
catch (IOException)
{
Console.WriteLine("Error: IO");
}
catch(Exception)
{
throw;
}
finally
{
if (sw != null)
sw.Close();
}
}
public void readRecord()
{
StreamReader sr = null;
string myInputline;
try
{
sr = new StreamReader(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt");
while ((myInputline = sr.ReadLine()) != null) ; //readline reads whole line
Console.WriteLine(myInputline);
}
catch (FileNotFoundException)
{
Console.WriteLine("Error: File not found");
}
catch(IOException)
{
Console.WriteLine("Error: IO");
}
catch (Exception)
{
throw;
}
finally
{
if (sr != null)
sr.Close();
}
}
}
}
答案 0 :(得分:17)
File.WriteAllText应该做你想做的事。
创建新文件,将指定的字符串写入文件,然后 关闭文件。如果目标文件已存在,则会被覆盖。
StreamWriter class还有一个覆盖/附加选项:
为指定的内容初始化StreamWriter类的新实例 使用默认编码和缓冲区大小的文件。如果是文件 存在,它可以被覆盖或附加到。
from unidecode import unidecode
df['text']=df.text.apply(lambda x: tb(unidecode(x)))
示例:
public StreamWriter(
string path,
bool append
)
查看您的代码,您传递using (StreamWriter writer = new StreamWriter("test.txt", false)){
writer.Write(textToAdd);
}
,这意味着追加。
true
如果您坚持使用不支持任何内容的.NET版本(例如紧凑型框架),您也可以自己实现sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
:
WriteAllText
答案 1 :(得分:1)
使用此
File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", line);
而不是
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
答案 2 :(得分:0)
请参阅此链接以获取Microsoft提供的解决方案: (https://msdn.microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx)
以下是附加现有文件的代码:
StreamWriter writer = File.AppendText(Filepath);
writer.WriteLine(content);
writer.Close();