【问题标题】:Why am I getting a "Could not find a part of the path" exception?为什么我会收到“找不到路径的一部分”异常?
【发布时间】:2013-09-15 10:34:44
【问题描述】:

我正在使用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();
}

【问题讨论】:

  • 错误很清楚,目录或路径不存在。
  • 检查'C:\Inetpub\wwwroot\Vendor\cn.jpg'目录是否在你的机器中。
  • 您的应用程序池身份是否对该文件夹具有权限?
  • 路径存在于我的系统上我已在服务器上托管应用程序并从那里访问它
  • 因为它在服务器中搜索而不是在您的系统中。

标签: c# asp.net visual-studio-2010 filenotfoundexception


【解决方案1】:

您可能还会遇到我的情况:目录名称包含一些不寻常的字符。就我而言,

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            您可以使用代码模拟:

            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。

            【讨论】:

              【解决方案7】:

              最好使用App_Data 文件夹来保存文件。

              看这里,Working with files,获取教程。

              【讨论】:

              • 这和问题有什么关系?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-11-08
              • 2013-02-10
              • 2014-07-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多