C# Can';无法在服务器端打开文件

C# Can';无法在服务器端打开文件,c#,asp.net,.net,file,C#,Asp.net,.net,File,对于asp.net中的web应用程序,我必须打开位于“app_data”目录中的文件。 在本地,它运行良好 但是当在服务器上发布时,我有一个错误:“系统找不到指定的文件” 这是我的密码: StreamReader reader = new streamReader(Server.MapPath("~/App_Data/pubkey.pem")); 当然,该文件存在于服务器上 我做错了什么 谢谢;) 编辑: 由于错误不在我认为的地方,我的问题就解决了。我已将mike的回答标记为有效,因为它帮助我

对于asp.net中的web应用程序,我必须打开位于“app_data”目录中的文件。 在本地,它运行良好

但是当在服务器上发布时,我有一个错误:“系统找不到指定的文件”

这是我的密码:

StreamReader reader = new streamReader(Server.MapPath("~/App_Data/pubkey.pem"));
当然,该文件存在于服务器上

我做错了什么

谢谢;)

编辑:
由于错误不在我认为的地方,我的问题就解决了。我已将mike的回答标记为有效,因为它帮助我发现我错了:)

您需要一个在IIS中定义为虚拟文件夹的App_数据文件夹,或者您的网站项目中名为App_数据的文件夹,如~所述,转到网站的根目录。如果您在windows中查找用户配置文件中存在的App_数据文件夹,则这是虚拟文件夹问题,或/并授予应用程序池标识访问该文件夹的正确权限

try
        {   // Open the text file using a stream reader.
            using (StreamReader sr = new StreamReader(Server.MapPath("~/App_Data/pubkey.pem")))
            {
            // Read the stream to a string, and write the string to the console.
                string doc = sr.ReadToEnd();
                System.Diagnostics.Debug.WriteLine(doc);
            }
        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine("The file could not be read:");
            System.Diagnostics.Debug.WriteLine(e.Message);
        }

尝试不使用~,如果不起作用,请检查您实际调用的位置,也许您需要添加.././但我怀疑,由于它在本地工作,我知道App_数据是一个受保护的文件夹,因此可能这会以某种方式阻止您,发布时,请确保包含实际存在的应用程序数据文件夹?服务器上是否将应用程序数据添加为IIS上的虚拟文件夹?在我看来这就是问题所在。转到IIS->[您的web应用]展开并检查文件夹是否存在。如果不只是右键单击->添加虚拟目录并将路径添加到folderFor@CularBytes谢谢,但没有~也一样,并且包含appdata文件夹。@DanielA.White是的,谢谢,但我不能定义虚拟文件夹,因为我的web应用程序托管在1&1 windows无限托管上,我无法控制IIS。。。我试图把我的文件放在网站的根目录上,但还是一样。我不知道它是否有帮助,但我发现了Server.MapPath(“~/App\u Data/pubkey.pem”),它的值是:E:\kunden\homepages\27\d732552085\www\App\u Data\pubkey.pem我已经检查了这个文件夹的安全设置,IUSR已经读取了访问权限。当你这样做时,你会得到什么:bool exists=System.IO.File.exists(Server.MapPath(“~/App\u Data/pubkey.pem”));我是真的…:/好的,我在原始答案中添加了另一个测试,看看运行它时会发生什么。如果失败了,也许例外情况会告诉你发生了什么。因为上次的测试结果是真的。这不是定位/访问问题。请尝试右键单击文件(而不是App_数据文件夹),选择“属性”,然后查看“属性”窗口并检查“生成”操作是否应设置为“内容”。还提供了何时复制到输出目录的选项。(即,如果是较新的部署版本)