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

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

これを行う別の方法はありますか、それとも完全に間違っていますか?

4

3 に答える 3

36

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

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

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

また、パスを作成する必要がある場合はSystem.IO.Path クラスを使用することをお勧めします。パスを分離するために非常に「OS固有の」定数を使用する文字列連結ではありません。"\"

あなたの例では、私は書きます

 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 に答える