我正在使用Visual Studio C#从我正在使用的本地搜索工具中解析文档位置的XML文档。具体来说,我使用c#来查询用户是否可以访问某些文件并隐藏它们无权访问的文件。我似乎有应该返回访问权限的文件是真的,但因为并非所有文件都是本地的(IE有些是没有专有名称的Web文件),它不显示对应该显示访问权限的文件的访问权限。现在的错误是由使用.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
这样的文件时,它会把它们放在catch堆栈中。如果我尝试打开文件但文件打开就好了。 (IE我有读访问权限,但由于文件类型或文件名中'?='的附加,它将其丢弃到不可读的堆栈中。
我希望通过url或本地访问可读的所有内容都显示,否则它会为我捕获错误文件。
答案 0 :(得分:3)
我不确定您要做什么,但如果您只想要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;
}
这来自Check if the path input is URL or Local File,它看起来就像你正在寻找的。 p>
答案 1 :(得分:1)
FileStream读取和写入本地文件。 “?”是本地文件名的有效字符。
看起来您想要打开本地和远程文件。如果您正在尝试这样做,您应该为每种类型使用approapriate metod下载 - 例如,对于WebRequest或相关类的HTTP。
注意:如果您说:当网址为“...”File.OpenRead(url)
有异常时,则会更容易回答,mesasge“...”。