asp.net 为什么会出现“找不到路径的一部分”异常?

kmb7vmvb  于 2023-08-08  发布在  .NET
关注(0)|答案(7)|浏览(194)

我正在使用Visual Studio 2010开发网站。我正在尝试在路径中保存文件。它运行良好的本地主机。
但同样的代码在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();
}

字符串

y0u0uwnf

y0u0uwnf1#

你可能也在经历我的经历:目录名包含一些不寻常的字符。我的情况是

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);

6g8kf2rb

6g8kf2rb2#

考虑一下你是如何启动VS的。与直觉相反的是,只有在管理员模式下运行VS时,我才会遇到这个问题。可能是集体政策的事情。

inn6fuwd

inn6fuwd3#

这可能是因为,您在Web服务器中没有指定的文件,或者您可能使用了错误的路径。指定确切的文件夹和文件名,作为它在Web服务器中的存储方式。使用HttpContext.Current.Request.ApplicationPathServer.MapPath指定正确的位置,你所需的文件所在.并确保您已经为该特定文件及其文件夹授予了读和写权限。

0h4hbjxa

0h4hbjxa4#

您需要在iis中设置权限,才能允许将文件保存在该文件夹中。基本上你上传的文件应该保存在一个单独的文件夹内存在你的根目录。

ivqmmu1c

ivqmmu1c5#

为了访问、创建和删除服务器上的文件,必须拥有权限。就像在我的项目中,我使用Impersonator类从服务器访问各种文件和文件夹。否则,它将抛出一个异常。

eufgjt7s

eufgjt7s6#

您可以使用代码模拟:
http://csharptuning.blogspot.com/2007/06/impersonation-in-c.htmlhttp://www.codeproject.com/Articles/14358/User-Impersonation-in-NET的数据库
无论如何,用作模拟的任何人都必须能够读取/写入保存到的位置。我们在跨网络删除/创建文件夹的应用程序中使用此方法。即使App_Data是最佳实践,访问该文件夹之外的文档也可能是业务要求。
还可以在IIS上设置模拟。
我还注意到您的函数名为btnImportFile。如果要上传文件,您可能需要查看FileUpload控件,该控件允许您获取文件的字节数组并根据需要保存。您可能仍然需要使用Server.MapPath或HttpContext.Current.Request.ApplicationPath,具体取决于您的需要。

y3bcpkx1

y3bcpkx17#

通常最好使用App_Data文件夹保存文件。
看看这里,Working with files,以获得教程。

相关问题