0

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

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 - Spanish

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

并在此文件夹中解压缩 C:\TFSPreview\Zinc\Web\Project\ScormPackages\Windows 8 Training SkyDrive - Spanish.zip 中包含的所有文件

所以我的问题是: CreateDirectory() 会在 C:\TFSPreview\Zinc\Web\Project\ScormPackages\ 中创建文件夹 Windows 8 Training SkyDrive - Spanish 还是会尝试在 c:? 中创建文件夹?

谢谢

4

1 回答 1

2

它会在里面创建目录C:\TFSPreview\Zinc\Web\Project\ScormPackages\事实上,如果它们不存在,它将创建该路径中的所有目录:

除非它们已经存在或路径的某些部分无效,否则会创建路径中指定的任何和所有目录。path 参数指定目录路径,而不是文件路径。如果目录已存在,则此方法不会创建新目录,但会返回现有目录的 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));
于 2013-03-01T12:00:51.873 回答