我的控制器中有这个代码:
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>
感谢
答案 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));