我的代码生成一个文件夹而不是一个文本文件

时间:2019-09-06 17:06:50

标签: c#

我的代码生成一个文件夹,但是我想要一个文本文件。我已经尝试修改路径,但是它不起作用:

try
{
    StreamWriter sw = new StreamWriter("C:\\" + "\\Funcionarios" + "\\Dados" + ".txt", true); //Abre o arquivo txt 
    sw.WriteLine(label1.Text + " " + data[0] + " " + label2.Text + " " + data[1] + " " + label3.Text + " " + data[2]); //Escreve no txt
    sw.Close(); //fecha o arquivo txt
}
catch
{
    Directory.CreateDirectory("C:\\" + "\\Funcionarios" + "\\Dados" + ".txt"); //Cria um diretório
    StreamWriter sw = new StreamWriter("C:\\" + "\\Funcionarios" + "\\Dados" + ".txt", true); //Abre o arquivo txt
    sw.WriteLine(label1.Text + " " + data[0] + " " + label2.Text + " " + data[1] + " " + label3.Text + " " + data[2]); //Escreve no txt
    sw.Close(); //fecha o arquivo txt
}

错误:

System.UnauthorizedAccessException:'C:\Funcionarios\Dados.txt'

1 个答案:

答案 0 :(得分:1)

在访问文件之前测试目录是否存在,而不是遇到异常。这样可以避免编写重复代码。之所以会出现异常,是因为您使用的是完整文件名而不是仅使用预期的目录部分来创建目录。

string path = @"C:\Funcionarios\Dados.txt";
string directory = Path.GetDirectoryName(path); // C:\Funcionarios

// Creates the directory unless it already exists.
Directory.CreateDirectory(directory);

string text = $"{label1.Text} {data[0]} {label2.Text} {data[1]} {label3.Text} {data[2]}\r\n";
File.AppendAllText(path, text);
  • "C:\\" + "\\Funcionarios" + "\\Dados" + ".txt"连接字符串是没有意义的,这不会创建与简单字符串常量"C:\\\\Funcionarios\\Dados.txt"不同的字符串。

  • 使用以@开头的verbatim string。这样可以抑制C#的转义序列处理,并使您避免将\加倍。

  • String interpolation带有$的说明简化了字符串的创建。

  • 静态方法File.AppendAllText将创建文件(如果尚不存在),将其打开,附加文本并通过一个简单的方法调用将其关闭。这比处理StreamWriter要容易得多。

根据Directory.CreateDirectory Method

  

CreateDirectory(String)
  除非已存在,否则在指定路径中创建所有目录和子目录。