C#:Server.Mappath如何读取文件?

时间:2009-06-12 14:55:40

标签: c# wcf file-io mapping

我有一个包含少数项目的Visual Studio 2008解决方案。一个项目包含WCF Service我正在部署。该WCF服务引用了其他项目中的一些代码。该代码试图读取WCF项目中的文件夹中的文件。伪项目结构:

Solution
 Project1
  myclass.cs
    string file = Server.Mappath("");


 Project2
  filefolder
    myfile.txt

放入Mappath的正确语法是什么?我尝试了所有不同的变体,例如:

".filefolder/myfile.txt"
"/filefolder/myfile.txt"
"./filefolder/myfile.txt"
"~/filefolder/myfile.txt"

似乎没有人能够访问该文件。我想到的一件事是:Visual Studio 2008在IIS的自己的沙箱中运行项目和WCF。这可能是问题吗?如果在常规IIS中进行设置和部署,它会起作用吗?

6 个答案:

答案 0 :(得分:31)

var serverPath =
       System.Web.Hosting.HostingEnvironment.MapPath("~/filefolder/myfile.txt"); 

答案 1 :(得分:2)

您是否尝试过使用HostingEnvironment.ApplicationPhysicalPath

var fileInfo = new FileInfo(
    Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , @"filefolder/myfile.txt" ) );

答案 2 :(得分:2)

Server.MapPath(Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , "Filename.txt" ));

似乎适合我。我确实需要包括

using System.Web.Hosting;

答案 3 :(得分:0)

最好的办法是不要这样做。

为什么要将一个项目的部署位置绑定到另一个项目的部署位置?如果需要WCF服务来读取文件,请将文件复制到WCF服务。

答案 4 :(得分:0)

来自MSDN;由于以下示例中的路径参数不以斜杠字符开头,因此它们相对于包含示例文件的目录进行映射。

尝试:

Server.Mappath("filefolder/somefile.file");

答案 5 :(得分:-1)

问题是,在调用WCF时,文件系统一直运行到bin / Debug文件夹。所以尝试从那里MapMath不起作用。回溯路径:

filedata = File.ReadAllBytes("../../filefolder/myfile.txt");

那很有用。感谢所有帮助人员!