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);
                }
            }
        }
Пример #3
0
        //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);
                }
            }
        }