Доступ к пути запрещен
По какой-то причине, когда я создаю свой путь, который будет использоваться для моего 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
удалит "\" из конца строки.
Вы должны использовать тот же метод на второй строке, напротив "+".