C#directory.create with physical path

时间:2017-05-24 11:39:49

标签: c#

我正在尝试创建一个目录,其中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下创建的。 提升的特权是可以的。

1 个答案:

答案 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.
// …