private async void DVPL_Extract_Dir_B_Click(object sender, RoutedEventArgs e) { if (IsBusy || IsOpenDialog) { return; } IsOpenDialog = true; BetterFolderBrowser bfb = new BetterFolderBrowser() { Title = ".dvplファイルが存在するフォルダを選択してください。", RootFolder = Sub_Code.Get_OpenDirectory_Path(), Multiselect = false, }; if (bfb.ShowDialog() == DialogResult.OK) { IsBusy = true; Sub_Code.Set_Directory_Path(bfb.SelectedFolder); uint Dir_Files = 0; List <string> DVPL_Files = new List <string>(); foreach (string file in Directory.EnumerateFiles(bfb.SelectedFolder, "*", SearchOption.AllDirectories)) { if (Dir_Files >= 100000) { Message_Feed_Out("フォルダ内のファイル数が多すぎます。"); DVPL_Files.Clear(); IsBusy = false; IsOpenDialog = false; return; } if (Path.GetExtension(file) == ".dvpl") { DVPL_Files.Add(file); } Dir_Files++; } if (DVPL_Files.Count == 0) { Message_Feed_Out(".dvplファイルが見つかりませんでした。"); IsBusy = false; IsOpenDialog = false; return; } Message_T.Text = ".dvplファイルを変換しています..."; await Task.Delay(50); int Count = DVPL.DVPL_UnPack(DVPL_Files, DVPL_Delete_C.IsChecked.Value); Message_Feed_Out(Count + "個の.dvplファイルを変換しました。"); } bfb.Dispose(); IsBusy = false; IsOpenDialog = false; }
//DVPLを解除(Pythonのプログラムに引数を渡し実行) private async void DVPL_Extract_B_Click(object sender, RoutedEventArgs e) { if (IsBusy) { return; } OpenFileDialog ofd = new OpenFileDialog() { Title = ".DVPLファイルを選択してください。", Multiselect = true, Filter = "DVPLファイル(*.dvpl)|*.dvpl" }; if (ofd.ShowDialog() == DialogResult.OK) { Message_T.Text = "DVPLファイルを展開しています..."; await Task.Delay(50); string Error_Path = ""; foreach (string File_Path in ofd.FileNames) { DVPL.DVPL_UnPack(File_Path, Path.GetDirectoryName(File_Path) + "/" + Path.GetFileNameWithoutExtension(File_Path), false); if (!File.Exists(Path.GetDirectoryName(File_Path) + "/" + Path.GetFileNameWithoutExtension(File_Path))) { Error_Path += File_Path + "\n"; } else { File.Delete(File_Path); } } Message_Feed_Out("DVPLファイルを展開しました。"); if (Error_Path != "") { Message_T.Text += "(エラーあり)"; System.Windows.MessageBox.Show("以下のファイルは展開できませんでした。\n" + Error_Path); } } }
//FSBファイルを選択 private async void FSB_Select_B_Click(object sender, System.Windows.RoutedEventArgs e) { if (IsClosing) { return; } System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog() { Title = "FSBファイルを選択してください。", Filter = "FSBファイル(*.fsb;*.fsb.dvpl)|*.fsb;*.fsb.dvpl", Multiselect = false }; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { bool IsDVPL = false; int Number = 0; if (Path.GetExtension(ofd.FileName) == ".dvpl") { IsDVPL = true; if (!File.Exists(Voice_Set.Special_Path + "/FSB_Select_Temp_01.fsb")) { DVPL.DVPL_UnPack(ofd.FileName, Voice_Set.Special_Path + "/FSB_Select_Temp_01.fsb", false); Number = 1; } else if (!File.Exists(Voice_Set.Special_Path + "/FSB_Select_Temp_02.fsb")) { DVPL.DVPL_UnPack(ofd.FileName, Voice_Set.Special_Path + "/FSB_Select_Temp_02.fsb", false); Number = 2; } else if (!File.Exists(Voice_Set.Special_Path + "/FSB_Select_Temp_03.fsb")) { DVPL.DVPL_UnPack(ofd.FileName, Voice_Set.Special_Path + "/FSB_Select_Temp_03.fsb", false); Number = 3; } } FModChannel.setPaused(true); FModChannel = new FMOD_API.Channel(); SubSound.release(); MainSound.release(); SubSound = new FMOD_API.Sound(); MainSound = new FMOD_API.Sound(); Location_T.Text = "00:00"; Message_T.Text = "FSBファイルを読み込んでいます..."; await Task.Delay(50); FSB_Select_T.Text = Path.GetFileName(ofd.FileName); List <string> Name_List; if (IsDVPL) { File_Full_Name = Voice_Set.Special_Path + "/FSB_Select_Temp_0" + Number + ".fsb"; Name_List = Fmod_Class.FSB_GetNames(Voice_Set.Special_Path + "/FSB_Select_Temp_0" + Number + ".fsb"); } else { File_Full_Name = ofd.FileName; Name_List = Fmod_Class.FSB_GetNames(ofd.FileName); } FSB_Number_T.Text = "ファイル数:" + Name_List.Count + " | 選択:なし"; FSB_Name_L.Items.Clear(); foreach (string Name_Now in Name_List) { FSB_Name_L.Items.Add(Name_Now); } if (Name_List.Count == 0) { Message_Feed_Out("内容を取得できませんでした。"); } else { Message_Feed_Out("読み込みが完了しました。"); } if (Number == 1) { Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_02.fsb"); Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_03.fsb"); } else if (Number == 2) { Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_01.fsb"); Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_03.fsb"); } else if (Number == 3) { Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_01.fsb"); Sub_Code.File_Delete_V2(Voice_Set.Special_Path + "/FSB_Select_Temp_02.fsb"); } } catch (Exception e1) { Message_Feed_Out("エラー:FSBファイルが壊れている可能性があります。"); Sub_Code.Error_Log_Write(e1.Message); } } }