Проблема с разрешениями пользователя - PullRequest
0 голосов
/ 22 апреля 2011

Я использую Visual Studio C # для анализа XML-документа на предмет местоположения файла из локального инструмента поиска, который я использую.В частности, я использую c # для запроса, имеет ли пользователь доступ к определенным файлам, и скрывает те, к которым у него нет доступа.Кажется, у меня есть файлы, которые должны возвращать доступ, правда, однако, поскольку не все файлы являются локальными (т.е. некоторые из них являются веб-файлами без собственных имен), он не показывает доступ к файлам, к которым он должен показывать доступ.Ошибка сейчас вызвана URL-адресом, использующим .aspx?i=573, есть ли обходной путь, или мне придется просто удалить все эти файлы ... = /

Редактировать: Подробнее ...

Я сейчас использую ....

foreach (XmlNode xn in nodeList)
            {

                string url = xn.InnerText;
                //Label1.Text = url;
                try
                { using (FileStream fs = File.OpenRead(url)) {  }
                }
                catch { i++; Label2.Text = i.ToString(); Label1.Text = url; }


            }

Проблема в том, что при попытке открыть файлы, такие как ... .aspx?i=573, он помещает их в стек перехвата.Если я пытаюсь открыть файл, файл открывается просто отлично.(То есть у меня есть доступ на чтение, но из-за типа файла или добавления символа «? =» В имени файла он бросает его в нечитаемый стек.

Я хочу, чтобы все, что доступно для чтения, было либо через URL, либолокальный доступ к дисплею, иначе он поймает файлы ошибок для меня.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Я не совсем уверен, что именно вы пытаетесь сделать, но если вам нужен только путь URI, вы можете легко удалить часть строки запроса, например:

        Uri baseUri = new Uri("http://www.domain.com/");
        Uri myUri = new Uri(baseUri, "home/default.aspx?i=573");

        Console.WriteLine(myUri.AbsolutePath); // ie "home/default.aspx"

Вы не можете иметь? в именах файлов в Windows, но они действительны в URI (поэтому IE может их открыть, а Windows - нет).

В качестве альтернативы, вы можете просто заменить '?' с другим символом, если вы конвертируете URL в имя файла.

На самом деле, подумав об этом сейчас, вы можете просто проверить, был ли ваш «документ» URI или нет, а если нет, то попытаться открыть файл в файловой системе. Похоже, вы пытаетесь открыть все и вся, что поставляется, но не мешало бы выполнить некоторые проверки данных.

private static bool IsLocalPath(string p)
{
  return new Uri(p).IsFile;
}

Это из Проверьте, является ли введенный путь URL-адресом или локальным файлом он выглядит именно так, как вы ищете.

1 голос
/ 22 апреля 2011

FileStream читает и записывает локальные файлы."?"недопустимый символ для локального имени файла.

Похоже, вы хотите открыть локальные и удаленные файлы.Если это то, что вы пытаетесь сделать, вы должны использовать подходящий метод загрузки для каждого типа - то есть для HTTP вы WebRequest или связанные классы.

Примечание: было бы гораздо проще ответить, если вы скажете:когда url равен "..." File.OpenRead(url) с ошибками, mesasge "...".

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