我正在使用Visual Studio 2010
开发网站。我想在路径中保存文件。它工作正常localhost。
但是相同的代码在IIS中不起作用。它显示以下错误
异常详细信息:System.IO.DirectoryNotFoundException:无法 找到路径'C:\ Inetpub \ wwwroot \ Vendor \ cn.jpg'的一部分。
无法找到路径'C:\ Users \ shashank \ Desktop \ ab.csv'的一部分。
以下是代码:
protected void btnImportFile_Click(object sender, EventArgs e)
{
sArReportText = File.ReadAllText(txtFilePath.Text.Trim());
// Set the report Properties to insert Report information
SetProperties();
}
答案 0 :(得分:4)
您可能也会遇到我的情况:目录名称包含一些不常见的字符。就我而言,
Could not find a part of the path 'C:\Web\metBoot\wild iis\DigiCert© Certificate Utility for Windows_files'.
该版权符号就是问题所在。
因此,使用从Obtaining the short 8.3 filename from a long filename绘制的概念,我首先将路径转换为简短形式,然后使用它来获取我的文件列表。
StringBuilder sf = new StringBuilder(300);
int n = GetShortPathName(sourceFolder, sf, 300);
if (0 == n)
{
tk.write(Marshal.GetLastWin32Error().ToString());
continue;
}
...
IEnumerable<string> fileGroup = Directory.EnumerateFiles(sf.ToString(), ext);
答案 1 :(得分:1)
这可能是因为您在Web服务器中没有指定的文件,或者您可能使用了错误的路径。指定确切的文件夹和文件名,以及它在Web服务器中的存储方式。使用HttpContext.Current.Request.ApplicationPath
或Server.MapPath
指定所需文件所在的正确位置。并确保您已为此特定文件及其文件夹授予读写权限。
答案 2 :(得分:0)
您需要在iis中设置权限才能将文件保存在文件夹中。基本上,您上传的文件应保存在根目录中的单独文件夹中。
答案 3 :(得分:0)
要访问,创建和删除服务器上的文件,必须具有权限。 就像我的项目一样,我使用Impersonator类从服务器访问各种文件和文件夹。 否则会引发异常。
答案 4 :(得分:0)
您可以使用代码模拟:
http://csharptuning.blogspot.com/2007/06/impersonation-in-c.html http://www.codeproject.com/Articles/14358/User-Impersonation-in-NET
无论您使用何种模仿,都必须能够读取/写入要保存到的位置。我们在跨网络删除/创建文件夹的应用程序中使用此方法。即使App_Data是最佳实践,访问该文件夹之外的文档也可能是业务要求。
您还可以在IIS上设置模拟。
我还注意到你的函数叫做btnImportFile。如果要上载文件,可能需要查看FileUpload控件,这样可以获取文件的字节数组并根据需要进行保存。 https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload%28v=vs.110%29.aspx。您可能仍需要根据需要使用Server.MapPath或HttpContext.Current.Request.ApplicationPath。
答案 5 :(得分:0)
也考虑一下如何启动VS。与直觉相反,只有在管理员模式下运行VS时,我才会遇到此问题。可能是组策略的事情。
答案 6 :(得分:-2)
通常最佳做法是使用App_Data
文件夹将文件保存到。
在这里查看Working with files,获取教程。