1

何らかの理由で、StreamWriter に使用されるパスを作成すると、test.doc というファイルではなく、test.doc というフォルダーが作成されます。

これが私のコードです:

fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote\\");
fileLocation = fileLocation + "test.doc";

ファイルパスで何が間違っているのか誰か教えてもらえますか?

アップデート:

class WordDocExport
{
    string fileLocation;
    public void exportDoc(StringBuilder sb)
    {
        fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote\\");
        fileLocation = fileLocation + "test.doc";

        if (!Directory.Exists(fileLocation))
        {
            Directory.CreateDirectory(fileLocation);
            using (StreamWriter sw = new StreamWriter(fileLocation, true))
            {
                sw.Write(sb.ToString());
            }
        }

        else
        {
            using (StreamWriter sw = new StreamWriter(fileLocation, true))
            {
                sw.Write(sb.ToString());
            }
        }
    }
}

遅れて申し訳ありません。今朝、仕事に出かける直前に質問を投稿しましたが、急いでいたので、残りのコードを投稿することすら考えていませんでした。それで、ここにあります。また、2行目のtest.docでPath.Combineを実行しようとしましたが、同じ問題が発生します。

4

4 に答える 4

4

OK、完全なコードを見た後:

    fileLocation = fileLocation + "test.doc";

    if (!Directory.Exists(fileLocation))
    {
        Directory.CreateDirectory(fileLocation);     // this is the _complete_ path
        using (StreamWriter sw = new StreamWriter(fileLocation, true))
        {
            sw.Write(sb.ToString());
        }
    }

文字通り、「test.doc」で終わる文字列を使用して CreateDirectory を呼び出しています。パスがで終わるかどうかは問題ではなく\有効なフォルダー パスです。"<something>\QuickNote\test.doc"

コードを次のものに置き換えることができます。

string rootFolderPath = Environment.GetFolderPath(
    System.Environment.SpecialFolder.MyDocuments);

string folderPath = Path.Combine(rootFolderPath, "QuickNote");

if (!Directory.Exists(folderPath))
{
    Directory.CreateDirectory(folderPath);
}

fileLocation = Path.Combine(folderPath, "test.doc");

using (StreamWriter sw = new StreamWriter(fileLocation, true))
{
    sw.Write(sb.ToString());
}

     

ライターを 2 回作成する必要はありません。

于 2012-08-21T17:48:07.067 に答える
1

これを試して:

var fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote");
fileLocation = Path.Combine(fileLocation, "test.doc");
于 2012-08-21T12:11:13.577 に答える
1

C# 4.0 バージョンをお持ちの場合は、直接テストできます

Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote", "test.doc");
于 2012-08-21T12:11:56.267 に答える
0

Path.Combine文字列の末尾から「\」を削除します。

「+」の代わりに 2 行目に同じ方法を使用する必要があります。

于 2012-08-21T12:10:41.110 に答える