Консольное приложение C #: справочный файл без .. \ .. \ filename - PullRequest
3 голосов
/ 05 декабря 2010

Мне нужно прочитать данные из файла в консольном приложении c #.
Что работает: new StreamReader(@"..\\..\myData.csv");

Проблема: ..\\..\ работает, потому что мой исполняемый файл находится в каталоге bin / Debug Когда я развертываю свой проект, путь больше не работает

Вопрос: Как я могу ссылаться на myData.csv независимо от расположения исполняемого файла?

Я надеялся найти метод, который возвращает «корень» моего консольного приложения. До сих пор я пробовал следующее:

Process.GetCurrentProcess().MainModule.FileName
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location
Path.GetFullPath("bp.csv")
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()

Все эти выражения приводят меня к каталогу исполняемого файла, а не к корню.

Я только начал читать об изолированном хранилище, но было бы неплохо иметь что-то попроще. Любые предложения / рекомендации?

Ответы [ 3 ]

5 голосов
/ 05 декабря 2010

Самый простой вариант - добавить CSV-файл в решение, щелкнуть его правой кнопкой мыши в VS и установить для действия сборки значение «Копировать, если новее», которое будет выводить его вместе с .exe (в Debug или Release).папка) при сборке.

В коде вы можете получить текущее местоположение исполняемой сборки следующим образом:

string folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

И затем вы можете объединить путь с именем файла CSV:

string filePath = Path.Combine(folder, "myData.csv");
2 голосов
/ 05 декабря 2010

Где будет храниться ваш myData.csv?Вы должны иметь абсолютное местоположение этого файла.

есть несколько вариантов

  1. Вы можете поместить этот файл в тот же каталог, где находится ваш exe-файл, поэтому вам нужно будет только

    new StreamReader("myData.csv");
    
  2. вы можете определить местоположение файла в файле App.Conig и прочитать это местоположение.

  3. вы можете установить переменную пути для чтения переменной PATH.

0 голосов
/ 05 декабря 2010

Вы должны изменить свой код на

new StreamReader("myData.csv");

Это гарантирует, что данные всегда читаются из одной и той же папки, из которой запускается .exe.

После этого вы можете создать шаг после сборки, чтобы скопировать файл в папку развертывания (или подпапку), чтобы даже в вашей среде отладки файл находился в правильном месте. Свойство «Копировать в выходную папку» в файле данных также сделает это, если вам просто нужно, чтобы файл находился в выходном пути проекта.

Если вам нужен больший контроль, то на этапах посткомпоновки вы можете использовать макросы, такие как $ (ProjectPath), чтобы указать, где находятся файлы проекта, и $ (TargetDir), чтобы указать, где будет выходной каталог.

...