web-dev-qa-db-ja.com

C#-「.txt」ファイルをプロジェクトルートに保存

テキストファイルを保存する必要のあるコードを記述しました。ただし、プロジェクトルートに保存して、私だけでなく誰でもアクセスできるようにする必要があります。

問題のメソッドは次のとおりです。

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

多くの人がAppDomain.CurrentDomain.BaseDirectoryには、アプリが保存された場所の動的な場所が含まれます。しかし、これを実行しても何も起こらず、ファイルも作成されません。

これを行う別の方法はありますか、それともまったく間違って使用していますか?

11
Computoguy

File.WriteAllText には2つのパラメーターが必要です。
1つ目はFileNameで、2つ目は書き込む内容です

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

ただし、アプリケーションを実行しているユーザーがフォルダーにアクセスする権限を持っていない場合、現在のフォルダーへの書き込みが問題になる可能性があることに注意してください。 (そして、最新のOSではProgram Filesへの書き込みは非常に制限されています)。可能であれば、この場所を Environment.SpecialFolder enumで定義されている場所に変更します

また、パスを構築する必要がある場合は System.IO.Path class を使用することをお勧めします。非常に 'OS固有の'​​定数"\"でパスを区切ります。

あなたの例では私は書くでしょう

 string destPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,fileName);
 File.WriteAllText(destPath, saveScene.ToString());
31
Steve

追加の+ @"\"は必要ありません:

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.
5

AppDomain.CurrentDomain.BaseDirectoryを使用する代わりに、次のように実行できます。

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

何も追加しない場合、ベースディレクトリが自動的に想定されます。

0
D J