Public Class RCmain Dim filepath(10000) As String 'ファイル指定変換の場合のファイルパス格納用 Dim dirpath As String 'フォルダ指定変換のフォルダパス Dim filenum As Integer 'ファイルの数 Dim timetable(10000, 3) As String '設定ファイルを格納する Dim beffname(10000) As String '変換前のファイル名 Dim aftfname(10000) As String '変換後ファイル名 Dim temptable(10000, 3) As String 'ファイル名から計算された時間とか Dim kouhotable(10, 3) As String '変換名候補用 Dim tempnum As Integer 'ファイル指定時のファイル数一時保管用 Dim jikanindex As Integer '時間管理用 どのタイムテーブルか Dim getindex As Integer 'どの変換ルートか Dim ttfile As String 'タイムテーブルファイル名を格納 Dim year As Integer Dim month As Integer Dim day As Integer Dim hour As Integer Dim minu As Integer Private Sub Bdirget_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bdirget.Click 'フォルダを指定して全ファイルを名前変換 'フォルダダイアログを出してディレクトリパスを取得する ' FolderBrowserDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim FolderBrowserDialog1 As New FolderBrowserDialog() ' ダイアログの説明を設定する FolderBrowserDialog1.Description = "録音ファイル保存フォルダ" ' ルートになる特殊フォルダを設定する (初期値 SpecialFolder.Desktop) FolderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer ' 初期選択するパスを設定する 'FolderBrowserDialog1.SelectedPath = "C:\Program Files\" ' [新しいフォルダ] ボタンを表示する (初期値 True) FolderBrowserDialog1.ShowNewFolderButton = False ' ダイアログを表示し、戻り値が [OK] の場合は、選択したディレクトリを表示する If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then TBDirpath.Text = FolderBrowserDialog1.SelectedPath '-------以下フォルダからファイルを取得する------- '指定フォルダのファイルをすべて取得 Dim kcsichiran() As String = {"*.mp3"} Dim kcsnow As String Dim files As Collection files = New Collection Dim tmpfiles() As String Dim k As Integer For Each kcsnow In kcsichiran tmpfiles = System.IO.Directory.GetFiles( _ TBDirpath.Text, kcsnow, System.IO.SearchOption.AllDirectories) If UBound(tmpfiles) > 0 Then For k = 0 To UBound(tmpfiles) files.Add(tmpfiles(k)) Next k End If Next Dim j As Integer 'ファイル数を取得し変換前名前変数、リストに追加 For j = 0 To files.Count - 1 beffname(j) = Dir(files(j + 1)) ListkouhoFile.Items.Insert(j, beffname(j)) Next j filenum = files.Count - 1 End If ' 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照) FolderBrowserDialog1.Dispose() Bnamech.Enabled = True End Sub Private Sub Bfileget_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bfileget.Click 'ファイルダイアログを出してファイルを選択 同じフォルダにあるファイルなら複数選択可 'フォルダを変えた場合でも変換できるようパスとファイル名を結びつける ' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim OpenFileDialog1 As New OpenFileDialog() ' ダイアログのタイトルを設定する OpenFileDialog1.Title = "録音ファイル指定" ' 初期表示するディレクトリを設定する OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments ' 初期表示するファイル名を設定する 'OpenFileDialog1.FileName = "初期表示するファイル名をココに書く" ' ファイルのフィルタを設定する OpenFileDialog1.Filter = "録音ファイル|*.mp3;*.MP3" ' ファイルの種類 の初期設定を 2 番目に設定する (初期値 1) OpenFileDialog1.FilterIndex = 2 ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False) OpenFileDialog1.RestoreDirectory = True ' 複数のファイルを選択可能にする (初期値 False) OpenFileDialog1.Multiselect = True ' [ヘルプ] ボタンを表示する (初期値 False) OpenFileDialog1.ShowHelp = True ' [読み取り専用] チェックボックスを表示する (初期値 False) 'OpenFileDialog1.ShowReadOnly = True ' [読み取り専用] チェックボックスをオンにする (初期値 False) 'OpenFileDialog1.ReadOnlyChecked = True ' 存在しないファイルを指定した場合は警告を表示する (初期値 True) 'OpenFileDialog1.CheckFileExists = True ' 存在しないパスを指定した場合は警告を表示する (初期値 True) 'OpenFileDialog1.CheckPathExists = True ' 拡張子を指定しない場合は自動的に拡張子を付加する (初期値 True) 'OpenFileDialog1.AddExtension = True ' 有効な Win32 ファイル名だけを受け入れるようにする (初期値 True) 'OpenFileDialog1.ValidateNames = True ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If OpenFileDialog1.ShowDialog() = DialogResult.OK Then ' Multiselect が True の場合はこのように列挙する For Each nFileName As String In OpenFileDialog1.FileNames filepath(tempnum) = IO.Path.GetDirectoryName(nFileName) beffname(tempnum) = Dir(nFileName) ListkouhoFile.Items.Insert(filenum, beffname(tempnum)) tempnum = tempnum + 1 Next nFileName End If filenum = tempnum - 1 ' 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照) OpenFileDialog1.Dispose() Bnamech.Enabled = True End Sub Private Sub Bnamech_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bnamech.Click Dim year2 As String Dim month2 As String Dim week As String Dim weekd(7) As String Dim day2 As String 'Dim sec As Integer Dim hour2 As String Dim minu2 As String Dim getname(14) As String Dim i As Integer Dim j As Integer Dim k As Integer Dim l As Integer Dim intFileNo As Integer Dim templine As String Dim kakunouline As String Dim tempname1 As String Dim tempname2 As String Dim ni As Integer Dim nj As Integer Dim toridashi As String 'ダブルクリック禁止 Bnamech.Enabled = False 'タイムテーブルを読み込む ここから '使用可能なファイルナンバーを取得 intFileNo = FreeFile() l = 0 'カレントディレクトリを実行ディレクトリに ChDir(System.IO.Path.GetDirectoryName(Application.ExecutablePath)) FileOpen(intFileNo, ttfile, OpenMode.Input) '行で取ってきたテキストを連結して分割 While Not EOF(intFileNo) templine = "" kakunouline = LineInput(intFileNo) For j = 0 To kakunouline.Length - 1 templine = templine & kakunouline(j) Next j timetable(l, 0) = Split(templine, ",")(0) timetable(l, 1) = Split(templine, ",")(1) timetable(l, 2) = Split(templine, ",")(2) timetable(l, 3) = Split(templine, ",")(3) l = l + 1 End While FileClose(intFileNo) 'タイムテーブル読み込みここまで 'ファイル名を一個づつ変換していく ここから For j = 0 To filenum '--機種依存部分 ここから-- '<録音ファイル名取得部分 ここから> For i = 0 To 14 'ファイル名を一文字ずつ取り出す getname(i) = beffname(j).Substring(i, 1) 'If IsNumeric(getname(i)) = False Then '取り出したものがアルファベットだった場合 'getname(i) = CStr(Asc(getname(i)) - 55) 'End If Next i 'ファイル名取得ここまで 'タイムスタンプ取得のためカレントディレクトリを変換フォルダに Select Case getindex Case 0 'フォルダ一括変換の場合 ChDir(TBDirpath.Text) Case 1 'ファイル指定変換の場合 ChDir(filepath(j)) End Select hour = System.IO.File.GetLastWriteTime(beffname(j)).Hour minu = System.IO.File.GetLastWriteTime(beffname(j)).Minute year = 2000 + CInt(getname(4) & getname(5)) month = CInt(getname(6) & getname(7)) day = CInt(getname(8) & getname(9)) '--機種依存部分 ここまで-- 'タイムテーブル指定で時間を調整 jikanteigi() '曜日設定 ここから week = Weekday(CDate(year & "/" & month & "/" & day)) weekd(1) = "sun" weekd(2) = "mon" weekd(3) = "tue" weekd(4) = "wed" weekd(5) = "thu" weekd(6) = "fri" weekd(7) = "sat" week = weekd(week) '曜日設定ここまで 'ファイル名用調整 year2 = CStr(year).Substring(2, 2) If month < 10 Then month2 = "0" & CStr(month) Else month2 = CStr(month) End If If day < 10 Then day2 = "0" & CStr(day) Else day2 = CStr(day) End If If hour < 10 Then hour2 = "0" & CStr(hour) Else hour2 = CStr(hour) End If If minu < 10 Then minu2 = "0" & CStr(minu) Else minu2 = CStr(minu) End If temptable(j, 0) = year2 & month2 & day2 temptable(j, 1) = week temptable(j, 2) = hour2 & minu2 'タイムテーブルに登録されているかどうか For k = 0 To l - 1 If timetable(k, 1) = temptable(j, 2) And timetable(k, 2) = temptable(j, 1) Then kouhotable(0, 0) = timetable(k, 0) '名前 kouhotable(0, 1) = temptable(j, 2) '時刻 kouhotable(0, 2) = temptable(j, 1) '曜日 kouhotable(0, 3) = timetable(k, 3) 'ファイル名形式 End If Next k '置換後ファイル名決定 If kouhotable(0, 0) <> "" And kouhotable(0, 3) = "0" Then '番組名+年月日+曜日 aftfname(j) = kouhotable(0, 0) & " " & temptable(j, 0) & " " & kouhotable(0, 2) ElseIf kouhotable(0, 0) <> "" And kouhotable(0, 3) = "1" Then '番組名+年月日 aftfname(j) = kouhotable(0, 0) & " " & temptable(j, 0) Else '時刻+年月日+曜日 aftfname(j) = temptable(j, 2) & " " & temptable(j, 0) & " " & temptable(j, 1) End If '候補データを空にする kouhotable(0, 0) = "" kouhotable(0, 1) = "" kouhotable(0, 2) = "" kouhotable(0, 3) = "" '重複ファイルチェック開始 If j > 0 Then nj = Len(aftfname(j)) '今のファイルの文字数を保存 tempname1 = aftfname(j) 'ループ処理のために名前を保存 固定文字列 tempname2 = aftfname(j) 'ループ処理のために名前を一時保存 For i = 0 To j - 1 '一個前のファイルまでループ処理、現在のファイルが一番新しいものとする前提 k = 0 'k初期化 ni = Len(aftfname(i)) '他のファイルの文字数を保存 If nj <= ni Then toridashi = aftfname(i).Substring(0, nj) '他のファイルから今のファイル文字数分のファイル名を保存 If tempname1 = toridashi Then '連番以外の部分でファイル名が等しい tempname2 = "" 'カウントアップ処理用にtempname2 初期化 If nj = ni Then '文字数が一緒であれば同名ファイル tempname2 = aftfname(j) & " 2" aftfname(i) = aftfname(i) & " 1" Else '文字数が違っていればすでに同名ファイルが複数存在 カウントアップ Do Until tempname2 = aftfname(i) tempname2 = tempname1 & " " & k k = k + 1 Loop 'ループで同じに名前になったものを+1した名前に tempname2 = tempname1 & " " & k End If End If End If Next i aftfname(j) = tempname2 End If '重複ファイルチェック終了 Next j 'ファイル名変換ここまで 'リストに登録 前のループに入れると同名ファイル処理の前にj番目のファイルは登録されている。スマートじゃないなぁ For j = 0 To filenum ListHenkan.Items.Insert(j, beffname(j) & " -----> " & aftfname(j) & ".MP3") Next MsgBox("準備完了") Select Case getindex Case 0 'フォルダ一括変換の場合 Bdirget.Enabled = False Brenamef.Enabled = True Case 1 'ファイル指定変換の場合 Bfileget.Enabled = False Brenamef.Enabled = True End Select End Sub Private Sub Brenamed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'ディレクトリ一括変換 Dim i As Integer 'Brenamed.Enabled = False ChDir(TBDirpath.Text) For i = 0 To filenum Rename(beffname(i), aftfname(i) & ".MP3") Next i MsgBox("ファイル名変換終了") End Sub Private Sub RCmain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load shokika() RadioButton1.Checked = True RBtimeset1.Checked = True End Sub Private Sub Brenamef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Brenamef.Click 'ファイル指定変換 Dim i As Integer 'ダブルクリック防止 Brenamef.Enabled = False Select Case getindex Case 0 ChDir(TBDirpath.Text) For i = 0 To filenum Rename(beffname(i), aftfname(i) & ".MP3") Next i MsgBox("ファイル名変換終了") Case 1 For i = 0 To filenum ChDir(filepath(i)) Rename(beffname(i), aftfname(i) & ".MP3") Next i MsgBox("ファイル名変換終了") End Select End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged 'フォルダ一括変換 Bdirget.Enabled = True 'brenamed.Enabled = True Bfileget.Enabled = False Brenamef.Enabled = False getindex = 0 End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged 'ファイル指定変換 Bdirget.Enabled = False 'Brenamed.Enabled = False Bfileget.Enabled = True 'Brenamef.Enabled = True getindex = 1 End Sub Private Sub RBtimeset1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RBtimeset1.CheckedChanged '時間をずらす jikanindex = 0 'カレントディレクトリを実行ディレクトリに ChDir(System.IO.Path.GetDirectoryName(Application.ExecutablePath)) ttfile = "gyoukaitimetable.txt" End Sub Private Sub RBtimeset2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RBtimeset2.CheckedChanged '時間そのまま jikanindex = 1 'カレントディレクトリを実行ディレクトリに ChDir(System.IO.Path.GetDirectoryName(Application.ExecutablePath)) ttfile = "realtimetable.txt" End Sub Sub jikanteigi() Select Case jikanindex Case 0 '業界タイムテーブルへの変換 If hour < 5 And day > 1 Then day = day - 1 hour = hour + 24 ElseIf hour < 5 And day = 1 And month <> 1 Then '前の月になってしまう場合 month = month - 1 day = Date.DaysInMonth(year, month) hour = hour + 24 ElseIf hour < 5 And day = 1 And month = 1 Then '1/1の場合 End If Case 1 'リアルタイム扱い 何もしない End Select End Sub Sub shokika() Dim i As Integer Dim j As Integer filenum = 0 tempnum = 0 TBDirpath.Text = "" ListHenkan.Items.Clear() ListkouhoFile.Items.Clear() 'Erase filepath, timetable, kouhotable, temptable, beffname, aftfname For i = 0 To 10000 filepath(i) = "" beffname(i) = "" aftfname(i) = "" For j = 0 To 3 timetable(i, j) = "" temptable(i, j) = "" Next j Next i For i = 0 To 10 For j = 0 To 3 kouhotable(i, j) = "" Next j Next i Bnamech.Enabled = False 'Brenamed.Enabled = False 'Brenamef.Enabled = False Select Case getindex Case 0 'フォルダ一括変換の場合 Bdirget.Enabled = True Brenamef.Enabled = False Case 1 'ファイル指定変換の場合 Bfileget.Enabled = True Brenamef.Enabled = False End Select End Sub Private Sub Bcancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bcancel.Click shokika() End Sub End Class |