Отсутствие обратной косой черты в имени файла с использованием C # - PullRequest
0 голосов
/ 25 марта 2010

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

string filename = @"C:\myfolder\myfile.jpg";

Когда я использую File.Exists (имя файла), он работает большую часть времени, но иногда я получаю сообщение о том, что следующий файл не существует:

C:myfoldermyfile.jpg

Что-то, кажется, удаляет обратную косую черту из имени файла. Этот код иногда доступен через ajax-запрос.

Кто-нибудь знает, почему / как это могло произойти?

Edit:

Вот более подробная версия кода.

public class Feeds {

    public static string ftpDir = @"C:\website\Feeds\";

}

public class Feed {

    public static void run(string name) {

        if (!Directory.Exists(Feeds.ftpDir + name)){ 

            Response.Write("Feed doesn't exist '" + Feeds.ftpDir + name + "'"); 

            return; 

        }

        //run feed...

    }

}

Ответы [ 5 ]

8 голосов
/ 25 марта 2010

Скорее всего, вы не использовали Path.Combine для объединения пути с именем файла. Вы никогда не должны объединять элементы пути, используя оператор +.

3 голосов
/ 25 марта 2010

Возможно, вы просто пропустили где-то символ @ перед одним из ваших литералов - тогда @"C:\mydir\myfile.txt" сработает, но "C:\mydir\myfile.txt" не сработает.

Вы, наверное, знаете, но на всякий случай: строка с префиксом @ не экранируется как обычно (т. Е. Последовательность \n тогда действительно означает обратную косую черту в нижнем регистре n, а не перевод строки. Это удобно для включения необработанных символов новой строки и других материал в источнике, и особенно удобно, если вы хотите представить что-то с множеством обратных косых черт в качестве содержимого (например, регулярные выражения).

0 голосов
/ 25 марта 2010

Вызов Directory.Exists(string) возвращает false, поскольку вы передаете ему путь к файлу, а не путь к каталогу.

Я не знаю, что снимает обратную косую черту на дисплее, если только это не имеет отношения к AJAX.

0 голосов
/ 25 марта 2010

обратная косая черта является escape-символом, поэтому после того, как вам нужно поставить 2 в ряд, чтобы получить реальный символ для отображения в вашей строке. вам нужно будет сделать "C: \ myfolder \ myfile.jpg"

0 голосов
/ 25 марта 2010

Символ обратной косой черты в C # является escape-символом, поэтому вы дважды «экранируете» символ m. Вам понадобится литерал \\ везде, где вы хотите \ в строке.

Для вашего случая использования System.IO.Path.Combine не требуется, поскольку это статический путь, но когда вы строите пути, скажем, из двух строк, одна с именем папки, а другая с именем файла, это лучший способ, и он не зависит от платформы.

( Редактировать: , так как вы используете префикс @, никакого удаления символов \ в компиляторе не происходит.)

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