System.IO.DirectoryNotFoundException 找不到路径“C:\home\site\Temp\filename.msi”的一部分

Posted

技术标签:

【中文标题】System.IO.DirectoryNotFoundException 找不到路径“C:\\home\\site\\Temp\\filename.msi”的一部分【英文标题】:System.IO.DirectoryNotFoundException Could not find a part of the path 'C:\home\site\Temp\filename.msi'System.IO.DirectoryNotFoundException 找不到路径“C:\home\site\Temp\filename.msi”的一部分 【发布时间】:2022-01-19 13:55:21 【问题描述】:

我正在构建 MVC 项目,其中一部分逻辑是将文件(以字节 [] 接收)保存到特定文件夹。它可以在我的 PC 上调试,但在发布到 Azure 时它不起作用。

这是我的代码:

var uniqueFileName = $"MSIDateTime.Now.Ticks.msi";    
var pathToWriteFile = Path.Combine(_hostingEnvironment.WebRootPath, @"..\TempFolder\" + uniqueFileName);

File.WriteAllBytes(pathToWriteFile , file);

我的错误是什么以及为什么它在调试中有效而在 Azure 中无效!

谢谢!

【问题讨论】:

尝试使用Path.GetTempPath() 获取可用的临时目录:docs.microsoft.com/en-us/dotnet/api/… @rhughes 它如何与 Azure 配合使用?可以从云端访问吗? @rhughes 成功了,谢谢! 【参考方案1】:

您可能无法访问 prod 服务器上的父目录

【讨论】:

为什么?我怎样才能改变它? 假设您在“C:/inetpub/www/myproject/”上“物理地”部署项目 (www.myproject.my),因此使用 Path.Combine(_hostingEnvironment.WebRootPath, @" ..\TempFolder\" 您正在尝试访问 C:/inetpub/www/TempFolder,这是被禁止的,并且 . 尝试在您的项目 Path.Combine(_hostingEnvironment.WebRootPath, "TempFolder", .. . 其实temp文件夹放在项目里面 那么,为什么在路径组合中引用 ..\TempFolder\?删除两个前导点和反斜杠作为旁注:如果您从通过 iis 部署更改为 Linux 机器,则在路径组合中包含 \ 、 / 是一项有风险的业务

以上是关于System.IO.DirectoryNotFoundException 找不到路径“C:\home\site\Temp\filename.msi”的一部分的主要内容,如果未能解决你的问题,请参考以下文章