Как узнать, что файл существует в директории c#

#c# #class #methods #directory #filepath

#c# #класс #методы #каталог #путь к файлу

Вопрос:

свойства файла путь к файлу Я пытаюсь передать путь к моему файлу своему методу, чтобы я мог получить его текст. Я использую ту же структуру кода для примерно 10 других методов в том же проекте, и он работает правильно. Однако я отправляю правильный путь к своему методу, и каталог существует в location, он не может найти файл и открыть его, и появляется сообщение об ошибке. Я проверил все возможные синтаксические ошибки, но не смог найти ни одной, и это происходит только в одном классе проекта. Кто-нибудь может сказать мне, как исправить эту ошибку? Возможно, это ошибка Visual Studio, о которой я не знаю.

Вот пример одного из двух методов, которые не могут найти существующий файл:

 public string ReadCourseInfoByID(string id)
    {
        string filepath = @"database\Courses\"   id   "\Info.txt" ;
        //MessageBox.Show(filepath);
        string dataline=" ";
        if (!Directory.Exists(filepath))
        {
            MessageBox.Show("File not found!", "Error");
            return dataline;
        }
        else
        {
           
            StreamReader InputFile;
            InputFile = File.OpenText(filepath);
            while (!InputFile.EndOfStream)
            {
                 dataline= InputFile.ReadLine();
            }
            InputFile.Close();
            return dataline;
        }

    }
 

Комментарии:

1. Какое сообщение об ошибке?

2. Обратите внимание, что это @"database\Courses\" будет буквально "database\Courses\" , с 2

3. Путь, подобный тому, который вы показываете ( databaseCourses ), является относительным путем . Это означает, что он относится к любому текущему каталогу. Если текущий каталог отличается, то путь будет указывать на другое местоположение

4. Я попробовал с одним «», но по-прежнему не находит существующий файл. Ошибка заключается в том, что каталог не найден, исключение, которое я использую, показывает окно сообщения «Файл не найден!»

5. Чтобы проверить реальный абсолютный путь, используйте что-то вроде var absolutPath = Path.GetFullPath(filepath ); , это даст вам реальный путь.

Ответ №1:

Вы должны использовать File.Exists not Directory.Exists , чтобы проверить, существует ли файл.

 if (!File.Exists(filepath))
{
    MessageBox.Show("File not found!", "Error");
    return dataline;
}
else...
 

Ответ №2:

Как прокомментировал Cid, вы используете дословную строку, обозначаемую префиксом @ вашей строки. Экранирующий символ для дословной строки — это не но " , что означает, что вам не нужно экранировать обратную косую черту, чтобы они были внутри вашей строки. Это превращает ваш текущий путь в это

string filepath = @"databaseCourses" id @"Info.txt"

Или, проще говоря, используя интерполяцию строк, это

string filepath = $@"databaseCourses{id}Info.txt"


Обратите внимание, что не рекомендуется выполнять конкатенацию пути к файлу вручную, как это. Вместо этого используйте путь.Комбинированный метод сделает это за вас. Это снова превращает ваш код в это

string filepath = Path.Combine("database", "Courses", id, "Info.txt");

Вот dotnetfiddle, демонстрирующий все это поведение. Обратите внимание, что пути не такие, как в системе Windows, но это связано с тем, как работает dotnetfiddle


Пожалуйста, также обратите внимание, что все эти пути к файлам являются относительными путями, то есть фактическое местоположение, на которое оно указывает, отличается в зависимости от того, где вы выполняете свое приложение. Если вы запустите его по C:Program Files пути, он будет указывать на C:Program FilesdatabaseCourses{id}Info.txt , но если вы запустите его в другом месте, например C:Temp , путь на самом деле будет указывать на C:TempdatabaseCourses{id}Info.txt

Комментарии:

1. Я тоже попробовал метод объединения, и он дает мне точный правильный путь, но все равно не может найти файл, возможно, что-то не так в моем каталоге. Я опубликую новые снимки экрана моего свойства info file.

2. в любом случае, спасибо за ваш комментарий, я использовал этот способ для своего файла