【问题标题】:User Permissions issue用户权限问题
【发布时间】:2011-08-10 15:02:16
【问题描述】:

我正在使用 Visual Studio C# 从我正在使用的本地搜索工具中解析 XML 文档以查找文件位置。具体来说,我正在使用 c# 来查询用户是否有权访问某些文件并隐藏那些它无权访问的文件。我似乎有应该返回访问权限的文件,但是因为并非所有文件都是本地文件(IE 有些是没有正确名称的 Web 文件)它没有显示对应该显示访问权限的文件的访问权限。现在的错误是由使用 .aspx?i=573 的 url 引起的,是否有解决方法或者我将不得不删除所有这些文件... =/

编辑:更多信息...

我现在正在使用....

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 之类的文件时,会将它们放入捕获堆栈中。如果我尝试打开文件但是文件打开就好了。 (IE 我有读取权限,但由于文件类型或文件名中附加了“?=”,它会将其扔到不可读的堆栈中。

我希望通过 url 或本地访问可以读取的所有内容都显示出来,否则它将为我捕获错误文件。

【问题讨论】:

  • 如果你指定你得到什么样的错误并且一些代码sn-ps也会对读者有所帮助。
  • 这并不是一个错误,因为它几乎按预期工作,问题是它过滤掉了我可以访问的对象。尽管谢谢,但我会添加更多信息。
  • 还要避免使用try catch块来控制程序的流程

标签: c# xml url permissions directory


【解决方案1】:

我不确定你到底想做什么,但如果你只想要一个 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,它看起来正是您正在寻找的东西。

【讨论】:

    【解决方案2】:

    FileStream 读取和写入本地文件。 “?”不是本地文件名的有效字符。

    您似乎想要打开本地和远程文件。如果这是您尝试做的事情,您应该为每种类型使用适当的下载方法 - 即对于 HTTP 您的 WebRequest 或相关类。

    注意:如果您说:当 url 为“...”时,File.OpenRead(url) 失败并出现异常,消息“...”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2014-12-30
      • 2018-05-21
      • 2023-03-22
      • 1970-01-01
      • 2017-05-02
      • 2013-11-06
      相关资源
      最近更新 更多