Проблема с доступом к файлу - PullRequest
1 голос
/ 13 мая 2010

У меня есть приложение winforms, и оно имеет ссылку на библиотеку MyLibrary.

В MyLibrary есть метод:

string[] GiveMeNamesOfAirports()
{
string[] lines= File.ReadLines("airports.txt");
foreach(string line in lines)
...
}

И когда я запускаю свое приложение Winforms:

Я получаю ошибку:

файл не найден.

Я пробовал другую функцию:

string[] lines = File.ReadAllLines(Path.Combine(System.Environment.CurrentDirectory, "airports.txt"));

string[]  lines = File.ReadAllLines(Path.Combine(Assembly.GetExecutingAssembly().Location, "airports.txt")); 
string[] lines = File.ReadAllLines(Path.Combine(Assembly.GetAssembly(typeof(Airport)).Location, "airports.txt"));

Файл находится в проекте MyLibrary (я вижу его в решении, и он находится в папке MyLibrary.

Я установил Копироватьвсегда выводить каталог для копирования и создавать действия для содержимого.

Ответы [ 4 ]

1 голос
/ 13 мая 2010

Неразумно использовать относительный путь к файлу. Рабочий каталог вашей программы может измениться и не сможет найти файл. Сгенерируйте абсолютный путь к файлу следующим образом:

    public static string GetAbsolutePath(string filename) {
        string dir = System.IO.Path.GetDirectoryName(Application.StartupPath);
        return System.IO.Path.Combine(dir, filename);
    }

Использование:

         string[] lines= File.ReadLines(GetAbsolutePath(@"mylibrary\airports.txt"));
1 голос
/ 13 мая 2010

Чтобы System.Environment.CurrentDirectory работал, вам нужно иметь файл "airports.txt" в каталоге bin \ release или bin \ debug (в зависимости от того, какой buid вы используете) при запуске из VS.

Два из них, использующие местоположение сборки, не будут работать, потому что Местоположение содержит имя сборки, поэтому у него больше, чем просто путь.

0 голосов
/ 13 мая 2010

Каждый из указанных выше методов предполагает, что файл "airport.txt" находится в той же папке, что и ваш исполняемый файл.Обратите внимание, что по умолчанию в Visual Studio отладочная версия вашего исполняемого файла (которая используется при отладке) находится в bin \ Debug, а версия выпуска, которую вы дадите своим пользователям, - в bin \ Release.

0 голосов
/ 13 мая 2010

Означает ли это, что MyLibrary имеет файл с именем airports.txt?

Если это так, вы должны быть уверены, что файл настроен на включение в вывод сборки. Щелкните правой кнопкой мыши файл в Visual Studio и выберите «Свойства». В окне «Свойства» есть свойство Copy to Output Directory, которое можно установить на Copy Always, и у вас больше не должно быть проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...