проблема с открытием файла в C # - PullRequest
0 голосов
/ 24 октября 2010

Что я делаю не так в следующем коде?

public string ReadFromFile(string text)
    {
        string toReturn = "";
        System.IO.FileStream stream = new System.IO.FileStream(text, System.IO.FileMode.Open);
        System.IO.StreamReader reader = new System.IO.StreamReader(text);
        toReturn = reader.ReadToEnd();
        stream.Close();
        return toReturn;
    }

Я помещаю файл text.txt в папку bin\Debug и по какой-то причине каждый раз, когда я вводю это имя файла ("text.txt") Я получаю исключение System.IO.FileNotFoundException.

Ответы [ 5 ]

4 голосов
/ 24 октября 2010

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

string applicationDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
string filename = System.IO.Path.Combine(applicationDirectory, text);

Это может быть или не быть решением вашей проблемы. На sidenote, text на самом деле не является достойным именем переменной для имени файла.

0 голосов
/ 08 июня 2011

Если я хочу открыть файл, который всегда находится в папке относительно пути запуска приложения, я использую:

 Application.StartupPath

, чтобы просто получить startuppath, затем я добавляю остаток пути (подпапки и / или имя файла).

С другой стороны: в реальной жизни (то есть в конфигурации конечного пользователя) местоположение файла, который вам нужно прочитать, редко зависит от пути запуска приложений. Приложения обычно устанавливаются в папке Program Files, данные приложений хранятся в другом месте.

0 голосов
/ 24 октября 2010

Мои предложения:

public string ReadFromFile(string fileName)
        {
            using(System.IO.FileStream stream = new System.IO.FileStream(fileName, System.IO.FileMode.Open))
            using(System.IO.StreamReader reader = new System.IO.StreamReader(stream))
            {
               return = reader.ReadToEnd();
            }
        }

или даже

string text = File.OpenText(fileName).ReadToEnd();

Вы также можете проверить, существует ли файл:

if(File.Exists(fileName)) 
{
   // do something...
}

Наконец - возможно ваш текстTXT-файл открыт другим процессом и не может быть прочитан в данный момент.

0 голосов
/ 24 октября 2010

Вы можете использовать Process Monitor (преемник FileMon), чтобы точно узнать, какой файл пытается прочитать ваше приложение.

0 голосов
/ 24 октября 2010

File.ReadAllText (путь) делает то же самое, что и ваш код. Я бы предложил использовать корневой путь, например, «c: ...... \ text.txt» вместо относительного пути. Текущий каталог не обязательно должен быть домашним каталогом вашего приложения.

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