У меня есть этот код, который должен присвоить строковое значение пути строковой переменной uripath:

private readonly FileStream _fileStream;

. . .

string uriPath = GetExecutionFolder() + "\\AppLogMsgs.txt";
_fileStream = File.OpenWrite(uriPath); 

. . .

private string GetExecutionFolder()
{
    return Path.GetDirectoryName       
(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
}

... но происходит сбой при попытке выполнить строку " _fileStream = File.OpenWrite (uriPath); ".

Почему и что мне нужно сделать, чтобы исправить это восстание?

Значение uriPath при сбое:

файл: \ C: \ Projects \ ReportScheduler \ ReportScheduler \ bin \ Debug \ AppLogMsgs.txt

0
B. Clay Shannon 18 Фев 2016 в 01:08

2 ответа

Лучший ответ

Если вы хотите узнать местоположение загруженного файла, содержащего манифест , вы можете изменить свой метод на

private string GetExecutionFolder()
{
    return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}

См. Свойство Location

3
Steve 17 Фев 2016 в 22:16

Свойство AssemblyName.CodeBase возвращает расположение сборки в виде URL-адреса, а поскольку сборка является локальным файлом, строка начинается с file: \

Просто нужно удалить эту часть из uriPath, и она должна работать как положено:

string uriPath = GetExecutionFolder() + "\\AppLogMsgs.txt";
uriPath = uriPath.Replace("file:\\", string.Empty);
_fileStream = File.OpenWrite(uriPath); 
2
Arturo Menchaca 17 Фев 2016 в 22:20