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 8TrainingSkyDrive-スペイン語

したがって、次のようになります。C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \ Windows 8 Training SkyDrive-Spanish \

上記のフォルダーで、C:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \ Windows 8TrainingSkyDriveに含まれるすべてのファイルを解凍します-Spanish.zip

だから私の質問は:CreateDirectory()はフォルダWindows 8 Training SkyDrive-スペイン語をC:\ TFSPreview \ Zinc \ Web \ Project \ ScormPackages \に作成しますか、それとも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 に答える