上传图片触发DirectoryNotFoundException:磁盘文件保存路径不存在
首先看你遇到的错误详情:
将在这段代码中,我将文件保存到磁盘时发生错误。找不到路径E:\Projects\FBClone\FBClone\Account\Uploads\14494605_1912172235673452_6934911680009623037_n.jpg的一部分。说明:当前Web请求执行期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中起源位置的更多信息。异常详细信息:System.IO.DirectoryNotFoundException: 找不到路径E:\Projects\FBClone\F...的一部分。
这个问题本质是目标文件所在的目录不存在,或者路径拼写有误,给你几个实用的解决步骤:
先核实路径的正确性
手动打开资源管理器,导航到E:\Projects\FBClone\FBClone\Account\Uploads\这个目录,看看它是否真的存在。特别注意文件夹名称的拼写、大小写(Windows虽不区分大小写,但代码拼错仍会出问题),有没有漏写层级(比如是不是少了一个FBClone文件夹?)。如果是代码里动态拼接的路径,检查拼接逻辑,比如有没有把用户ID、日期这类变量拼错导致路径异常。在保存文件前自动创建缺失的目录
这是最稳妥的做法,不管目录是否存在,先确保它被创建出来。用C#的话可以这么写:// 你的目标文件路径 string fullFilePath = @"E:\Projects\FBClone\FBClone\Account\Uploads\14494605_1912172235673452_6934911680009623037_n.jpg"; // 提取文件所在的目录路径 string targetDirectory = Path.GetDirectoryName(fullFilePath); // 如果目录不存在,就递归创建所有层级的目录 if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } // 接下来执行你的文件保存操作,比如File.Copy、File.WriteAllBytes或者上传控件的SaveAs方法 // 例如:yourFileUploadControl.SaveAs(fullFilePath);Directory.CreateDirectory()会自动创建所有缺失的父目录,不用你一层一层手动创建。排查权限问题(如果目录存在但还是报错)
如果确认目录已经存在,但依然抛出这个异常,那大概率是权限问题:- 如果是ASP.NET应用,检查你的应用程序池对应的账号(比如IIS AppPool\YourAppPoolName)有没有该目录的读写权限。右键目录→属性→安全→编辑,添加对应账号并赋予写入权限。
- 如果是桌面程序,检查当前运行程序的用户账号有没有访问该目录的权限,比如E盘是不是被加密或者限制了访问。
内容的提问来源于stack exchange,提问作者Muhammad Saqib

