C# 从启动项目中找不到的文件中读取
我的web解决方案有许多项目C# 从启动项目中找不到的文件中读取,c#,asp.net-mvc,file,C#,Asp.net Mvc,File,我的web解决方案有许多项目 启动项目名为“Bob” “鲍勃”指的是“吉尔”项目 在“吉尔”里面,有一个我想读的文件。“Gill/One/Two/hi.txt” 我在Bob中有一些代码,它调用了试图访问上述txt文件的“Gill”项目中的一些代码: File.ReadAllText(@"~/One/Two/hi.txt") 找不到该文件 我已将文件生成标记为 内容 我已将复制到输出目录标记为: 如果更新,请复制 访问该文件的方法是什么?我相信~是由.NET webform使用的,并且只有
- 启动项目名为“Bob”
- “鲍勃”指的是“吉尔”项目
- 在“吉尔”里面,有一个我想读的文件。“Gill/One/Two/hi.txt”
File.ReadAllText(@"~/One/Two/hi.txt")
找不到该文件
我已将文件生成标记为 内容 我已将复制到输出目录标记为: 如果更新,请复制
访问该文件的方法是什么?我相信
~
是由.NET webform使用的,并且只有服务器.MapPath允许()
您可以通过newsystem.IO.FileInfo(@“One/Two/hi.txt”)获取该文件代码>尝试文件路径作为
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\One\\Two\\hi.txt");
设定
构建操作:无
复制到输出:始终复制(或复制,如果更新)您需要
确保文件已复制到您的网站。如果它不存在,你就无法阅读
正确地组合文件路径。执行代码不直接知道~
作为路径字符,您必须将其转换为System.IO
命名空间中任何类型的网站的根路径,如文件或路径。最好的方法是使用
代码:
标记为内容并复制到外部项目中引用的文件(这些文件反过来又被web项目引用)的内容将相对于web应用程序的bin
文件夹进行复制。在这种情况下,向根路径添加bin
,如下所示:
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin");
如果已将文件设置为复制到输出目录,则该文件将位于应用程序的bin目录中
稍微改变一下我的答案,你可以这样做
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin");
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt");
if(System.IO.File.Exists(filePath)) {
var allText = System.IO.File.ReadAllText(filePath);
}
它将解析应用程序的bin
目录,您的文件将在该目录中扎根。要访问该文件,您需要将其复制到启动项目可执行目录,或在配置中存储指向该文件所在目录的路径。或者,您可以将其作为资源嵌入并以这种方式访问它。启动项目所需的只是对其他项目输出的DLL的引用,这样它就不会看到其他内容文件。“较新时复制”只是复制到相对于当前项目的目录中。我以前有过解决方案,有一个专门的“资源”项目,其任务是将资产发布到右侧place@Charleh这使我可以访问dllAssembly.getExecutionGassembly()
现在怎么办?“找不到路径'C:\\One\\Two\\hi.txt'的一部分。”我更新了jimmy,我想这是因为开始时的斜杠。这段代码试图查看“Bob”目录(启动项目)而不是“Gill”目录(文件所在的项目)@Jimmyt1988-一切都与根web应用程序相关。因此,如果您在另一个项目中有一个文件要包含,则应该相对于发布路径(web应用)包含该文件。从这一点开始构建您的路径,因为web应用程序没有项目概念(Gill/Bob),这是一个纯Visual Studio概念的解决方案。我理解这一点,但是,我希望该文件存在于我的项目中。这就是为什么我的问题是在运行应用程序时如何访问文件。我认为复制到输出应该在这方面有所帮助。将其放入输出目录应允许您保存该文件。@Jimmyt1988-当您从web应用程序中包含外部项目的内容时,这些内容将相对于启动项目bin
文件夹放置。所以Bob\bin\Gill\relativeFilePath
。relativeFilePath
取决于您指定的其他文件夹。这不是一个非常方便的构造,通常项目中包含的静态内容(如.txt、.xls、.mdb等文件)会直接在web应用程序项目中引用。如果您将~/bin
,它会起作用。谢谢你几乎让我到达那里,编辑你的答案,我会接受:)
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin");
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt");
if(System.IO.File.Exists(filePath)) {
var allText = System.IO.File.ReadAllText(filePath);
}