.net C#当文件扩展名为.txt时无法覆盖文件内容

x8diyxa7  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(142)

我正在尝试将字符串写入用户使用SaveFileDialog组件指定的文件。
如果输出文件尚不存在,则会成功创建并填充该文件。但是,如果文件确实存在,并且具有文件扩展名,则会生成System.UnauthorisedAccessException,说明Access to the path 'C:\Users\mmark\Desktop\Output.txt' is denied
我已经测试了输出文件与.csv和.txt文件扩展名,并没有文件扩展名,它只更新了一个文件成功,如果它没有一个文件扩展名。
我试过:

  • 使用StreamWriter.Write输出文件。
  • 使用FileStream.Write输出文件。
  • 使用File.WriteAllText输出文件。
  • 在再次尝试上述任何方法之前,请将文件属性设置为normal以删除只读。

下面是我用来将字符串写入文件的代码,注解掉了其他一些尝试,以显示我试图做的事情。如有任何协助,将不胜感激:

private void SaveFileBtn_Click(object sender, EventArgs e)
{
    SaveFileDialog dialog = new SaveFileDialog();

    if (dialog.ShowDialog() == DialogResult.OK) {
        try {
            //if(File.Exists(dialog.FileName)) {
            //     File.SetAttributes(dialog.FileName, FileAttributes.Normal);
            //}

            File.WriteAllText(dialog.FileName, richTextBox1.Text);

            //using (StreamWriter writer = new StreamWriter(dialog.FileName)) {
            //    writer.Write(richTextBox1.Text);
            //}

            //using (FileStream fs = File.Create(dialog.FileName)) {
            //    byte[] info = new UTF8Encoding(true).GetBytes(richTextBox1.Text);
            //    fs.Write(info, 0, info.Length);
            //}

            MessageBox.Show("File Created!");
        } catch(Exception err) {
            MessageBox.Show("File Creation Error: " + err);
        }
    }
}

字符集

olhwl3o2

olhwl3o21#

在此特定场景中,问题是由C:\Users\mmark目录上的访问权限引起的,通过将文件保存到C:\Users\mmark目录之外的其他文件夹解决了该问题。
虽然在这种情况下没有发生,但问题的一个可能原因也可能是该文件先前在应用程序中或由另一个应用程序打开,并且在尝试保存时仍然打开。

相关问题