カテゴリー
Software Utility

フォルダ内ファイル一括複製システム | AmpiTa Project

開発時期:2023年

開発者:AmpiTa Project

開発言語:C#言語(Visual Studio 2022)




背景・概要

 撮影機材メーカーであるZOOM社のハンディレコーダーを使用していますが、録音を区切ると、その都度フォルダが作成されていきます。

 おそらくフォルダ分けする方が使いやすいプロの方々が多いのだと思いますが、セリフを小分けに録音すると何十ものフォルダができてしまい、そこからファイルを取り出すのが面倒になります。

 


 そこで、今回はZOOM社のハンディレコーダーのSDカードに入っているファイルをすべて、フォルダがどうのと考える事無くファイルだけすべて取り出して1つのフォルダにまとめるシステムを開発することにしました。




ZOOM社のハンディレコーダー

 ZOOM社とは、ウェブ会議システムのzoomとは別の会社です。撮影用の機材を作って売っているメーカー、ブランドです。

 ハンディレコーダーとは、小型録音機のICレコーダーが大きくなった感じの物です。

 本体にマイクが内蔵されている訳ではなく、外付けマイクを使って録音します。集音用のマイクを取り付けて、下図のようにカメラにマウントさせて撮影することもできます。


 該当インタビューのように、手で持つマイクをつないで録音(撮影)することもできます。

 今回は、ナレーションを録音している際に小間切れの録音データの管理の煩わしさを感じました。




仕様

 参照元となるフォルダを指定し、複製先となるフォルダを指定し、両者が決定したところで処理を実行します。

 処理では、参照元のフォルダの1層目から最下層まで、そこに存在するすべてのファイルを参照します。

 ファイルが発見されると、同じファイル名で複製先へ保存できるか確認します。
 初出の場合はそのままのファイル名で保存します。
 2回目以降はファイル名に数字を付記して重複を避けます。




コード

 UIは前述の図のようなもので、テキストボックスとボタンの組合せで参照元・複製先を指定します。

 実行ボタンを押すと処理を開始します。

 まず、参照元指定のボタンは下記のように記述しました。複製先の指定もテキストボックス名が違うくらいで大差ありません。

FolderBrowserDialog selectFolder = new FolderBrowserDialog();
selectFolder.Description ="参照元フォルダ";
selectFolder.RootFolder = Environment.SpecialFolder.Desktop;
selectFolder.ShowNewFolderButton = false;
if (selectFolder.ShowDialog(this) == DialogResult.OK)
{ txb_Reference.Text = selectFolder.SelectedPath; }
else
{ return; }

 処理実行ボタンは下記のように記述しました。
 最初にフォルダ指定が終わっていることの確認などを終わらせます。
 ファイル名は拡張子不問ですべて取得(GetFiles)するので『*』にしてあります。
 foreachで全ファイルを順番に調査し、Existsでファイルの存在有無を確認したのちにファイルを複製(Copy)します。
 すべての処理が終わると、複製先のフォルダを開いて処理を終了します。

var var_Folder_Receive = txb_Receive.Text;
if (string.IsNullOrEmpty(txb_Reference.Text )|| string.IsNullOrEmpty(var_Folder_Receive))
{ return; }

if (System.IO.Directory.Exists(@var_Folder_Receive))
{ }
else
{ System.IO.DirectoryInfo diFolderIndex = System.IO.Directory.CreateDirectory(var_Folder_Receive); }

System.IO.DirectoryInfo dirInfo_Reference = new System.IO.DirectoryInfo(@txb_Reference.Text );
System.IO.FileInfo[] fileInfo_Reference = dirInfo_Reference.GetFiles("*", System.IO.SearchOption.AllDirectories);

foreach (System.IO.FileInfo fileInfo_File_List in fileInfo_Reference)
{
    int int_File_Count = 1;
    var var_FileName = var_Folder_Receive + "\\" + fileInfo_File_List.Name;

    while (System.IO.File.Exists(var_FileName))
    {
        int_File_Count++;
        var_FileName = 
            System.IO.Path.GetDirectoryName(var_FileName) + 
            "\\" +
            System.IO.Path.GetFileNameWithoutExtension(var_FileName) +
            "_" + int_File_Count + 
            fileInfo_File_List.Extension;
    }
    System.IO.File.Copy(@fileInfo_File_List.FullName, @var_FileName);
}
System.Diagnostics.Process.Start(@var_Folder_Receive );
          




おわりに

 今回の開発は、ファイルを1つずつ移すのと、プログラミングするのと、どちらが短時間で終わるかを考えて開発しました。

 ZOOM社のハンディレコーダーは今後も使用するのでトータルとしてはプログラミングした方が時間短縮になるのはわかっていましたが、今回の単回で考えた末、1時間以内にプログラミングを終わらせれば初回使用から採算ベースとなるかなと思って開発しました。

 したがって、コードが雑です。
 メッセージボックスは1つも無く、エラーが出ているかどうかもわかりません。
 処理状況も可視化されないので、他人が使うとなると戸惑うと思いますが、自分用なので良いかな、という感じです。

 デジカメファイル用のファイルネームチェンジャーに本機能を搭載した方が良かったかなと、制作後に気づきましたので、いずれは統合しようと思います。

ソフトウェア開発実績はこちら