代码之家  ›  专栏  ›  技术社区  ›  kowsikbabu

为什么服务中的file.readalltext会将其目录重置为“c:\windows\system32”?

  •  1
  • kowsikbabu  · 技术社区  · 7 年前

    我创造了一个 服务 它也是一个httpserver,我已经编写了HTML文件并将它们存储在同一个工作目录中的一个文件夹中,(比如 E:\My_project\Pages\home.html ) 我有一个library.cs文件在 E:\My_project\ . 在我的代码里我有这行,

    string content = File.ReadAllText("Pages/home.html");  
    

    当我试图读这行时,我得到以下错误:

    mscorlib: Could not find a part of the path 'C:\WINDOWS\system32\Pages\home.html'
    

    早些时候,它适用于其他一些页面,当我单独硬编码主页并从这些目录中读取其他页面(如404.html)时。现在我已经将主页也添加到了页面文件夹中,我得到了这个错误。

    我的问题是如何克服这个错误以及Windows为什么要转到 C:\Windows\System32 而不是在与文件相同的目录中查找。

    注意:是的,我使用线程,服务使用多个线程。

    代码:

    图书馆

    public static List<Route> GetRoutes() {
            List<Route> routes = new List<Route>();
            string content = File.ReadAllText("Pages/home.html");
            routes.Add(new Route
            {
                Name = "Hello Handler",
                UrlRegex = @"^/$",
                Method = "GET",
                Callable = (HttpRequest request) =>
                {
                    return HttpBuilder.GetHome();
                }
            });
            return routes;
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Nick    7 年前

    服务应用程序在理解“当前目录”时就像普通的Windows应用程序。当您想要访问一个文件并传递一个相对名称时,您的应用程序尝试通过搜索以下内容来查找该文件: 1。加载应用程序的目录。 2。当前目录。 三。Windows系统目录。 查看更多详细信息 here

    现在,当前目录对于每个进程都是特定的,它可以在启动时通过参数配置,或者在运行时使用 Directory.SetWorkingDirectory link .

    在这种情况下,需要将工作目录设置为网页所在的位置。