不确定Directory.CreateDirectory()的工作原理

时间:2013-03-01 11:57:24

标签: asp.net-mvc-3

我的控制器中有这个代码:

public ActionResult Upload(ScormUploadViewModel model)
{
  if (ModelState.IsValid)
  {
    if (model.ScormPackageFile != null)
    {
      string zipCurFile = model.ScormPackageFile.FileName;
      string destinationDirectoryName = Path.GetFullPath(zipCurFile);
      //.GetFileNameWithoutExtension(zipCurFile);
      Directory.CreateDirectory(destinationDirectoryName);
    }
   }
 }

我在我的视图中上传了一个zip文件,然后需要将其解压缩到与zipfilename同名的文件夹中的相同位置

文件是:C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \ Windows 8 Training SkyDrive - Spanish.zip

我需要在C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \中创建一个文件夹 名称:Windows 8 Training SkyDrive - 西班牙语

因此有:C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \ Windows 8 Training SkyDrive - Spanish \

和UNZIP在上面的文件夹中包含C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \ Windows 8 Training SkyDrive中包含的所有文件 - 西班牙语.zip

所以我的问题是:将CreateDirectory()创建文件夹Windows 8 Training SkyDrive - 西班牙语在C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \或它是否会尝试在c:??中创建文件夹/ p>

感谢

1 个答案:

答案 0 :(得分:2)

它将在C:\TFSPreview\Zinc\Web\Project\ScormPackages\内创建目录。 In fact,如果它们尚不存在,它将在该路径中创建所有目录:

  

创建路径中指定的所有目录,除非它们   已存在或除非路径的某些部分无效。路径   参数指定目录路径,而不是文件路径。如果   目录已存在,此方法不创建新目录,   但它返回现有目录的DirectoryInfo对象。

但是,此代码有一个错误:destinationDirectoryName不是目录的路径,它是目标目录中文件的路径。所以你应该做的是

// zipCurFile = C:\...\ScormPackages\Windows 8 Training SkyDrive - Spanish.zip
// Path.GetDirectoryName gives "C:\...\ScormPackages"
// Path.GetFileName gives "Windows 8 Training SkyDrive - Spanish"
// Path.Combine on these two gives you the correct target

Directory.CreateDirectory(
    Path.Combine(
        Path.GetDirectoryName(zipCurFile), Path.GetFileName(zipCurFile));