Доступ к пути запрещен

По какой-то причине, когда я создаю свой путь, который будет использоваться для моего 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());
            }
        }
    }
}

Извините за задержку. Я отправил вопрос этим утром прямо перед тем, как уйти на работу, и очень спешил, даже не подумав опубликовать остальную часть своего кода. Итак, вот оно. Также я попытался сделать Path.Combine на 2-й строке test.doc, но это дает ту же проблему.

4 ответа

Решение

ОК, увидев полный код:

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

Вы буквально вызываете CreateDirectory со строкой, заканчивающейся на "test.doc". Неважно, если путь заканчивается \ или нет, и "<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());
}

Не нужно создавать писателя дважды.

Если у вас есть версия C# 4.0, вы можете протестировать напрямую

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

Попробуй это:

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

Path.Combine удалит "\" из конца строки.

Вы должны использовать тот же метод на второй строке, напротив "+".

Другие вопросы по тегам