Проверка существования файла с использованием относительного пути

Каков наилучший способ проверить наличие файла с использованием относительного пути.

Я использовал следующий метод, но он возвращает false, несмотря на то, что файл существует.

 bool a = File.Exists("/images/Customswipe_a.png");

Ответ 1

Это не относительный путь. Вам нужно оставить первый /, иначе он будет интерпретироваться как корневой (то есть C:/images...)

Ответ 2

Я предполагаю, что вы используете этот код в приложении asp.net, поэтому вы получаете false.

В asp.net вы должны использовать Server.MapPath("/images/Customswipe_a.png") для получения "правильного" пути (относительно корневого каталога веб-приложения). В противном случае вы получите локальный путь к исполняемому файлу веб-сервера (IIS/WEBDAV/.. имя любого другого).

Ответ 3

Относительный путь относится к текущему рабочему каталогу. Это не может быть каталог приложения. Вызовите GetCurrentDirectory(), чтобы проверить фактический путь, который вы тестируете.

Ответ 4

Вам просто нужно определить, что ваш файл относительно

  • Ваша основная сборка приложения?
  • Текущий каталог?
  • Каталог данных приложений?
  • назовите его...

В каждом из этих случаев я бы предложил вам преобразовать его в абсолютный путь методом Path.Combine:

public static readonly string AppRoot = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

...

//calling with a '/' heading makes the path absolute so I removed it
var fullPath = Path.Combine(AppRoot, "images/Customswipe_a.png");
var exists = File.Exists(fullPath);

Таким образом, вы можете гарантировать, где вы ищете. Даже диалоговые окна "Открыть/Сохранить" могут изменить текущий каталог. Таким образом, вызов File.Exists без полного пути обычно является неправильным решением.

Ответ 5

Относительный путь - это относительный. В этом API он будет, согласно документации File.Exists:

Относительная информация о пути интерпретируется как относительно текущей рабочий каталог.

Итак, все здесь зависит от того, что такое CurrentDirectoty в момент выполнения этого запроса.

Кроме того, ваш путь недействителен. Путь к рабочему столу (предположим, вы выбрали его из какого-либо веб файла или знаний). Чтобы понять, если указанный путь содержит недопустимые символы, используйте функцию GetInvalidCharacters.

В вашем конкретном случае достаточно использовать @"\images\Customswipe_a.png".

Ответ 6

Путь относится к местоположению вашего двоичного файла. В случае проекта визуальной студии это будет %PROJECTDIR%/bin/(RELEASE||DEBUG)/

Что бы я делал, это положить корень файловой системы в файл конфигурации и использовать его для вашего относительного пути.

Ответ 7

В приложении WinForms вы можете получить каталог exe файла с помощью

string directory =
    Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath);

В другом решении используется Reflection

string directory =
    Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);