我正在尝试创建一个目录,其中directory.create()传递物理路径(而不是与Server.MapPath相关的...)
new FileInfo(ConfigurationManager.AppSettings["ServerPath"].ToString() + "/" + file.Id).Directory.Create();
的Web.config:
<add key="ServerPath" value="C:/inetpub/wwwroot"/>
但它不起作用。有任何想法吗? 我正在尝试将文件复制到此目录,我收到此错误:
复制失败:无法找到路径的一部分 'C:/inetpub/wwwroot/103/filename.png'。行
因为文件夹/ 103不是在C:/ inetpub / wwwroot下创建的。 提升的特权是可以的。
答案 0 :(得分:0)
string serverPath = ConfigurationManager.AppSettings["ServerPath"].ToString();
new FileInfo(serverPath + "/" + file.Id).Directory.Create();
这种方法的问题在于您首先创建一个FileInfo
对象,然后使用Directory
属性访问它的目录。
在您的情况下,您的FileInfo对象指向文件C:/inetpub/wwwroot/103
。请注意,我说文件。该文件的父目录为C:/inetpub/wwwroot
,然后是您Create
上的DirectoryInfo
对象。
由于wwwroot
文件夹显然已经存在,所以实际上什么也没做。但是,您实际想要创建的子目录103
也不会创建。
要解决此问题,您需要首先将C:/inetpub/wwwroot/103
路径解释为目录。您可以通过直接创建DirectoryInfo
对象来实现:
new DirectoryInfo(serverPath + "/" + file.Id).Create();
由于您实际上正在使用该文件夹中的文件filename.png
执行某些操作,因此可能更好的方法是从相反的方向开始并使用该文件及其FileInfo:
var file = new FileInfo(Path.Combine(serverPath, file.Id, "filename.png"));
// create directory of that file; this does nothing if it already exists
file.Directory.Create();
// write to the file path, etc.
// …