15

我写了一些代码,需要我保存一个文本文件。但是,我需要将它保存到我的项目根目录,以便任何人都可以访问它,而不仅仅是我。

这是有问题的方法:

private void saveFileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            string fileName = Microsoft.VisualBasic.Interaction.InputBox("Please enter a save file name.", "Save Game");
            if (fileName.Equals(""))
            {
                MessageBox.Show("Please enter a valid save file name.");
            }
            else
            {
                fileName = String.Concat(fileName, ".gls");
                MessageBox.Show("Saving to " + fileName);

                System.IO.File.WriteAllText(saveScene.ToString(), AppDomain.CurrentDomain.BaseDirectory + @"\" + fileName);
            }
        }
        catch (Exception f)
        {
            System.Diagnostics.Debug.Write(f);
        }
    }

许多人告诉我 usingAppDomain.CurrentDomain.BaseDirectory将包含应用程序存储位置的动态位置。但是,当我执行此操作时,什么也没有发生,也没有创建文件。

有没有另一种方法可以做到这一点,或者我只是完全错误地使用它?

4

3 回答 3

36

File.WriteAllText需要两个参数:
第一个是 FileName,第二个是要写入的内容

File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + @"\" + fileName, 
                  saveScene.ToString());

但是请记住,如果运行您的应用程序的用户无权访问该文件夹,则写入当前文件夹可能会出现问题。(并且在最新的操作系统中写入程序文件非常有限)。如果可以将此位置更改为Environment.SpecialFolder枚举中定义的位置

我还希望建议您在需要构建路径时使用System.IO.Path 类,而不是使用非常“特定于操作系统”的常量"\"来分隔路径的字符串连接。

在你的例子中,我会写

 string destPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,fileName);
 File.WriteAllText(destPath, saveScene.ToString());
于 2013-09-15T14:29:34.280 回答
5

不需要额外的+ @"\"只是做:

AppDomain.CurrentDomain.BaseDirectory + fileName

并替换参数

saveScene.ToString()

AppDomain.CurrentDomain.BaseDirectory + fileName

你的代码应该是:

private void saveFileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            string fileName = Microsoft.VisualBasic.Interaction.InputBox("Please enter a save file name.", "Save Game");
            if (fileName.Equals(""))
            {
                MessageBox.Show("Please enter a valid save file name.");
            }
            else
            {
                fileName = String.Concat(fileName, ".gls");
                MessageBox.Show("Saving to " + fileName);

                System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory +  fileName, saveScene.ToString());
            }
        }
        catch (Exception f)
        {
            System.Diagnostics.Debug.Write(f);
        }
    }

你可以在File.WriteAllText 这里阅读:

参数

   path Type: System.String 

       The file to write to.  

   contents Type: System.String

       The string to write to the file.
于 2013-09-15T14:30:10.263 回答
0

而不是使用AppDomain.CurrentDomain.BaseDirectory你可以这样做:

    File.WriteLine("data\\Mytxt.txt", "Success!");

当您不添加任何内容时,将自动假定基本目录。

于 2020-03-31T15:01:17.477 回答