2016-09-01 2 views
-1

こんにちは私はWPFプラットフォームで作業しています。 Unzipのようなファイル操作を実行し、ボタンを押してファイルを移動したい。ボタンを押したときにプログラムを実行して、UnzipAndCreateUpdatePackageメソッドを実行し、操作が完了するのを待ってから、Move Methodを実行してから、私に確認を提供します。特定のファイル操作が完了するまでファイル操作を保持する


は私が行いたいこと: プログラムウェイトを作る解凍が完了した後、解凍したフォルダからデータを移動するまで。現在のプログラムでは、解凍プロセスが完了しなかったため、例外が見つからないファイルが表示されます。


私は達成することができますどのようにこの

現在、私のコードは次のようになります。ボタンをタップイベントコード

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     List<string> FileNames = new List<string>(); 
     FileNames.Add("ApplicationData.zip"); 
     FileNames.Add("MapData.zip"); 
     FileNames.Add("LicenseData.zip"); 


     WithoutExtentionNameList = new List<string>(); 
     WithoutExtentionNameList.AddRange(FileNames); 

     for (int item = 0; item < WithoutExtentionNameList.Count; item++) 
     { 
      WithoutExtentionNameList[item] = WithoutExtentionNameList[item].Replace(".zip", " ").TrimEnd(); 
     } 

     UnZipAndCreateUpdatePackage(FileNames); 

     moveData("LicenseTest 7.txt"); 
    } 

UnZipAndCreateUpdatePackageメソッドコード:

private void UnZipAndCreateUpdatePackage(List<string> FileNameList) 
    { 
     string CheckPreviousData = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0]); 
     if (System.IO.Directory.Exists(CheckPreviousData)) 
     { 
      DeleteDirectory(CheckPreviousData); 
     } 

     if (!System.IO.Directory.Exists(CheckPreviousData)) 
     { 
      System.IO.Directory.CreateDirectory(CheckPreviousData); 
     } 

     foreach (var FileName in FileNameList) 
     { 

      if (FileName.Contains("Map")) 
      { 
       fileDestination = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0]); 
      } 

      //create a source file path 
      sourceFile = System.IO.Path.Combine(fileLocation, FileName); 

      ZipFile.ExtractToDirectory(sourceFile, fileDestination); 
     } 
     fileDestination = @"C:\Users\adity\Desktop\MapUpdaterTemp"; 

    } 

Movedata方法:

private void moveData(string LicenseFileName) 
    { 
     //Now Map the file data as per Update Package 
     string MoveFrom = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0], WithoutExtentionNameList[2], LicenseFileName); 
     string MoveTo = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0], WithoutExtentionNameList[1], LicenseFileName); 

     System.IO.File.Move(MoveFrom, MoveTo); 
    } 
+1

どのような確認が欲しいですか?あなたが現在使っているコードの何が間違っていますか? 'MoveData()'の後に 'MessageBox.Show()'を呼び出すことができますか? – gilmishal

+0

@gilmishal確認は問題ではありません。 Unzipが完了するまでプログラムを待機させ、解凍されたフォルダからデータを移動します。現在のプログラムでは、解凍プロセスが完了しなかったため、例外が見つからないファイルが表示されます。 –

答えて

0

ブールextractNow = FASEのようなものと呼ばれるグローバルなブール値を作成します。

次に、このような2つのキーの間のコードにwhile()ステートメントを追加します。

Stopwatch sw = new Stopwatch(); 
sw.Start(); 

UnZipAndCreateUpdatePackage(FileNames); 

while(!extractNow) //or extractNow == false 
{ 

} 

sw.Stop(); 

TimeSpan milSecs = TimeSpan.FromMilliseconds(sw.ElapsedMilliseconds); 
string timePassed = string.Format("{0:D2}d {1:D2}h:{2:D2}m:{3:D2}s", 
      milSecs.Days, milSecs.Hours, milSecs.Minutes, milSecs.Seconds); 

moveData("LicenseTest 7.txt"); 

MessageBox.Show("Extraction Completed in :" + timePassed.ToString()); 

次に、boolを抽出の最後にtrueとして追加します。

private void UnZipAndCreateUpdatePackage(List<string> FileNameList) 
{ 
    string CheckPreviousData = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0]); 
    if (System.IO.Directory.Exists(CheckPreviousData)) 
    { 
     DeleteDirectory(CheckPreviousData); 
    } 

    if (!System.IO.Directory.Exists(CheckPreviousData)) 
    { 
     System.IO.Directory.CreateDirectory(CheckPreviousData); 
    } 

    foreach (var FileName in FileNameList) 
    { 

     if (FileName.Contains("Map")) 
     { 
      fileDestination = System.IO.Path.Combine(fileDestination, WithoutExtentionNameList[0]); 
     } 

     //create a source file path 
     sourceFile = System.IO.Path.Combine(fileLocation, FileName); 

     ZipFile.ExtractToDirectory(sourceFile, fileDestination); 
    } 
    fileDestination = @"C:\Users\adity\Desktop\MapUpdaterTemp"; 
    extractNow =false; 
} 

これはかなりうまくはいきませんが、うまくいくはずです。

関連する問題