Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果文件已经存在,如何覆盖该文件?_C#_.net_Winforms_Text Files_Streamwriter - Fatal编程技术网

C# 如果文件已经存在,如何覆盖该文件?

C# 如果文件已经存在,如何覆盖该文件?,c#,.net,winforms,text-files,streamwriter,C#,.net,Winforms,Text Files,Streamwriter,我在做一个音乐播放器。它有两种形式;一个是你播放音乐的主要区域。第二个表单有一个选中列表框,您可以在其中选择所需的MP3。 当我点击一个按钮时,它会将所选内容保存在一个.txt文件中,这样我就可以在第一个表单中访问它们,我会将字符串放入路径中,以便music player查找文件 这是我第二个表单中的代码,我将所选歌曲保存到.txt文件中 private void selectbtn_Click(object sender, EventArgs e) { if (File.Exists(

我在做一个音乐播放器。它有两种形式;一个是你播放音乐的主要区域。第二个表单有一个选中列表框,您可以在其中选择所需的MP3。 当我点击一个按钮时,它会将所选内容保存在一个.txt文件中,这样我就可以在第一个表单中访问它们,我会将字符串放入路径中,以便music player查找文件

这是我第二个表单中的代码,我将所选歌曲保存到.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();   
}
WriteAllText 你应该做你想做的

创建一个新文件,将指定的字符串写入该文件,然后 关闭文件。如果目标文件已存在,则会覆盖该文件

流作者 还可以选择覆盖/追加:

为指定对象初始化StreamWriter类的新实例 使用默认编码和缓冲区大小创建文件。如果文件 存在时,可以将其覆盖或附加到

例如:

using (StreamWriter writer = new StreamWriter("test.txt", false)){ 
    writer.Write(textToAdd);
}
查看您的代码,您正在传入
true
,这意味着追加

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
.NET精简框架 如果你的.NET版本不支持任何东西(例如compact framework),你也可以自己实现
WriteAllText

static void WriteAllText(string path, string txt) {
    var bytes = Encoding.UTF8.GetBytes(txt);
    using (var f = File.Open(path, FileMode.Create)) {
        f.Write(bytes, 0, bytes.Length);
    }
}
用这个

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);

有关Microsoft提供的解决方案,请参阅此链接: ()

下面是附加现有文件的代码:

StreamWriter writer = File.AppendText(Filepath);
writer.WriteLine(content);
writer.Close();

如果文件存在,为什么不直接删除它?你的
songRecord.writeRecord
在做什么?如果在擦除文件之前打开该文件,它可能已读入当前文本。根据API文档
文件。writealText
应替换内容。如果没有,则提交错误报告。这是清除文件的代码。请粘贴将列表写入文件的代码。该部分包含错误。我很确定您可能没有关闭流编写器或文件。这就是文件被锁定的原因,第二次尝试写入时,先前的锁定状态未被清除并导致问题。请调试代码。并暂停检查文件是否确实被清除。然后找出是什么将内容添加回.NET Compact Framework中。在C#.NET Compact Framework中,没有File.WriteAllText。替代方案是什么?谢谢。@RuiMiguelPinheiro我已经添加了一些代码,您可能会使用openwrite。这很危险,如果您写的字节数少于文件中已有的字节数,那么文件将混合包含新旧数据。我建议使用File.openwithfilemode.Create。@Hogan感谢您的反馈,我已经更新了示例
sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true);
sw.WriteLine(line);
StreamWriter writer = File.AppendText(Filepath);
writer.WriteLine(content);
writer.Close();