Замена символов разделителя в пути к файлу - PullRequest
4 голосов
/ 15 апреля 2010

Я разрабатываю веб-приложение на C # в VS 2008. Я позволяю пользователю выбрать входной файл, а затем сохраняю путь к файлу в строковой переменной. Тем не менее, он хранит этот путь как "C:\\folder\\...". Итак, мой вопрос, как мне преобразовать этот путь к файлу в один "\"?

Спасибо, ребята, за вашу помощь! Пожалуйста, прости меня, так как я новичок в разработке ASP.NET. Это больше моего кода в контексте. Сначала я хочу посмотреть, существует ли каталог. Я думаю, мне не нужно проверять это, если я проверяю, существует ли файл. Но это все равно должно работать правильно? И в настоящее время моя строковая переменная path не отображается так, как мне нужно. Я не уверен, как сформулировать это утверждение. В конце концов я хочу выполнить инструкцию ReadAllText (см. Последнюю строку).

protected void btnAppend_Click(object sender, EventArgs e)
{
    string fullpath = Page.Request.PhysicalPath;
    string fullPath2 = fullpath.Replace(@"\\", @"\");

    if (!Directory.Exists(fullpath2))
    {
    string msg = "<h1>The upload path doesn't exist: {0}</h1>";
    Response.Write(String.Format(msg, fullpath2));
    Response.End();
}
    string path = "@" + fullpath2 + uploadFile.PostedFile.FileName; 

    if (File.Exists(path))
    {
        // Create a file to write to.
        try
        {
            StreamReader sr = new StreamReader(path);
            string s = "";
            while(sr.Peek() > 0)
                s = sr.ReadLine();
            sr.Close();
        }
        catch (IOException exc)
        {
            Console.WriteLine(exc.Message + "Cannot open file.");
            return; 
        }
    }

    if (uploadFile.PostedFile.ContentLength > 0)
    {

        inputfile = System.IO.File.ReadAllText(path);

Ответы [ 3 ]

6 голосов
/ 15 апреля 2010

Вы уверены, что проблема в обратном слэше? Обратная косая черта - это escape-символ в строках, поэтому, если вы добавляете его в строку, вы должны ввести его как «\\», а не «\». (если вы не используете @) Обратите внимание, что отладчик часто отображает строку так, как вы бы ее поместили в коде, с escape-символами, а не с прямым.

Согласно документации , Page.Request.PhysicalPath возвращает путь к указанному файлу, а не к каталогу. Directory.Exists имеет значение true, только если вы даете ему каталог, а не файл. File.Exists () возвращает true?

5 голосов
/ 15 апреля 2010

Для начала вызов fullpath.Replace() ничего не делает для fullpath; он возвращает новую строку. Кроме того, когда ваши строковые литералы содержат \ (обратную косую черту), вы должны сообщить компилятору, что вы не пытаетесь использовать escape-последовательность:

fullpath = fullpath.Replace(@"\\", @"\"); 

@ означает «пожалуйста, относитесь к этой строке буквально (дословно)». Другими словами, «когда я говорю обратную косую черту, я имею в виду обратную косую черту!»

См. http://msdn.microsoft.com/en-us/library/362314fe.aspx.

Edit:

Как упоминал Лебле, вы вызываете Directory.Exists () по полному пути к файлу. Это не сработает; вам нужно извлечь часть каталога из пути. Попробуйте это:

if (!Directory.Exists(Path.GetDirectoryName(fullpath)))
{
     ...
}
0 голосов
/ 15 апреля 2010

Возможно, вы захотите заменить его на Path.DirectorySeparatorChar вместо \ на вероятность того, что ваш код может в конечном итоге работать на другой платформе за один день (mono.net позволяет запускать его на linux или, возможно, более вероятно может оказаться на какой-то странной мобильной платформе)

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