C# C路径问题

C# C路径问题,c#,path,C#,Path,我有这个文件:C:\Documents and Settings\Extrayasam\My Documents\Visual Studio 2010\Projects\FCR\WebApplication4\config\roles.txt,我想将它导入到我的C应用程序中。如果我插入完整路径就可以了,但是我想做一些类似于我们对网站所做的事情,那就是\config\roles.txt 但是,对于下面的代码,这不起作用 这是我的代码: public string authenticate(

我有这个文件:C:\Documents and Settings\Extrayasam\My Documents\Visual Studio 2010\Projects\FCR\WebApplication4\config\roles.txt,我想将它导入到我的C应用程序中。如果我插入完整路径就可以了,但是我想做一些类似于我们对网站所做的事情,那就是\config\roles.txt

但是,对于下面的代码,这不起作用

这是我的代码:

    public string authenticate()
    {
        WindowsIdentity curIdentity = WindowsIdentity.GetCurrent();
        WindowsPrincipal myPrincipal = new WindowsPrincipal(curIdentity);

        //String role = "NT\\Internet Users";

        //string filePath = Server.MapPath("config/roles.txt");
        //string filePath = (@"~/WebApplication4/config/roles.txt");
        //string filePath = Path.GetDirectoryName(@"\config\roles.txt");
        string filePath = Path.GetPathRoot(@"/config/roles.txt");
        string line;
        string role = "";

        if (File.Exists(filePath))
        {
            StreamReader file = null;
            try
            {
                file = new StreamReader(filePath);
                while ((line = file.ReadLine()) != null)
                {
                    role = line;
                }
            }
            finally
            {
                if (file != null)
                {
                    file.Close();
                }
            }
        } 

        if (!myPrincipal.IsInRole(@role))
        {
            return "401.aspx";
        }
        else
        {
            return "#";
        }
    }

您应该选择您的文件并按F4,然后选择复制到输出目录。然后您就可以使用它了

您应该选择您的文件并按F4,然后选择复制到输出目录。然后,您将能够在ASP.NET中使用它,您可以使用~/config/roles.txt-结合Server.MapPath,您可以获得完整的路径

[…]ASP.NET包含Web应用程序根操作符~,它 在服务器控件中指定路径时可以使用。ASP.NET 将~运算符解析为当前应用程序的根。你 可以将~运算符与文件夹结合使用来指定路径 这是基于当前根的。 看

因此,您可以尝试以下方法:

string filePath = System.Web.HttpContext.Current.Server.MapPath("~/config/roles.txt");
在ASP.NET中,您可以使用~/config/roles.txt-与Server.MapPath结合使用,您可以获得完整的路径

[…]ASP.NET包含Web应用程序根操作符~,它 在服务器控件中指定路径时可以使用。ASP.NET 将~运算符解析为当前应用程序的根。你 可以将~运算符与文件夹结合使用来指定路径 这是基于当前根的。 看

因此,您可以尝试以下方法:

string filePath = System.Web.HttpContext.Current.Server.MapPath("~/config/roles.txt");

您可以尝试将该文件作为资源嵌入到项目中。类似这样的内容:

您可以尝试将文件作为资源嵌入到项目中。类似这样的内容:

您可以使用将指定的相对或虚拟路径映射到服务器上相应的物理目录

您可以使用将指定的相对或虚拟路径映射到服务器上相应的物理目录

因为您在本地工作,所以您可以使用该文件的绝对路径,并且它将正常工作。 但是,当包含roles.txt文件的web应用程序部署在某个web服务器上,并且用户将尝试从另一台机器访问该文件时,情况会怎样呢? 您可以使用以下方法从Windows应用程序访问web服务器上托管的文件:

using (var stream = new WebClient().OpenRead("your_web_application_root_url/configs/roles.txt"))
using (var reader = new StreamReader(stream))
{
    Console.WriteLine(reader.ReadToEnd());
}

请注意,通过网络共享安全设置并不是一个好主意。

因为您在本地工作,所以可以使用该文件的绝对路径,并且它可以正常工作。 但是,当包含roles.txt文件的web应用程序部署在某个web服务器上,并且用户将尝试从另一台机器访问该文件时,情况会怎样呢? 您可以使用以下方法从Windows应用程序访问web服务器上托管的文件:

using (var stream = new WebClient().OpenRead("your_web_application_root_url/configs/roles.txt"))
using (var reader = new StreamReader(stream))
{
    Console.WriteLine(reader.ReadToEnd());
}

请注意,通过网络共享安全设置不是一个好主意。

您的意思是希望从WinForms或Console应用程序访问web应用程序中的文件?帖子标记为ASP.NET,因此我认为该文件是在ASP.NET中访问的服务器端。我正在开发一个基于web的内部应用程序,正在从C文件检索该文件,这是否响应您的查询@OneHalfTrackMindMan@StephanBauer-Sry,对于该标记,因为它是一个.NET应用程序,所以我添加了该标记,但是,从中检索文件的实际类是C。您可能还希望查看@string文本以避免这些反斜杠。您的意思是您希望从WinForms或Console应用程序访问web应用程序中的文件?该帖子标记为ASP.NET,因此我认为该文件是在ASP.NET的服务器端访问的。我正在开发一个内部web应用程序基于应用程序,该文件是从C文件检索的,这是否响应您的查询@OneHalfTrackMindMan@StephanBauer-Sry,对于该标记,因为它是一个.NET应用程序,所以我添加了该标记,但是从中检索文件的实际类是C。您可能还希望查看@string文本,以避免我在CVS上使用的那些反斜杠,当我遇到问题时,我注意到我需要一些东西来获取路径。安全性是一个优先事项,因此您的方法实际上不是一个选项。我看到的是Path类,我想到的是这样的:string filePath=Path.GetDirectoryName@\\config\\roles.txt;但它仍然不起作用我正在使用CVS,当我遇到这个问题时,我注意到我需要一些东西来获得路径。安全性是一个优先事项,因此您的方法实际上不是一个选项。我看到的是Path类,我想到的是这样的:string filePath=Path.GetDirectoryName@\\config\\roles.txt;但它仍然不起作用。C只是一种语言。您可以用C编写ASP.NET应用程序。。。你有什么样的申请?ASP.NET WebForms、WinForms、控制台、WPF。。。?您的应用程序相对于文档位于何处?ASP.NET Web应用程序是什么类型的应用程序
我正在使用您应该能够使用根运算符-我在回答中添加了一个示例I cannot user Server.MapPath,因为此错误弹出当前contextSystem.Web.HttpContext.current.Server…C中不存在名称“Server”。您可以用C编写ASP.NET应用程序。。。你有什么样的申请?ASP.NET WebForms、WinForms、控制台、WPF。。。?您的应用程序相对于文档位于何处?ASP.NET Web应用程序是我正在使用的应用程序类型。您应该能够使用根运算符-我在回答中添加了一个示例我无法使用Server.MapPath,因为此错误会弹出“Server”名称在当前文档中不存在contextSystem.Web.HttpContext.Current.Server。。。