質問
ITはファイルサーバーの使用率を下げることを担当しているので、古いファイル(Excel / Access / Txtなど)を圧縮するという役割を果たしたいと思います。
数千のファイルを含むフォルダーがあるため、ディレクトリ全体を1つの大きなファイルに圧縮したくありません。ユーザーが簡単に行えるように、いくつかの小さなファイルを作成することをお勧めします。探しているデータ「バケット」を見つけます。
C#を使用してディレクトリを読み取り、ファイルを年月グループに圧縮する方法はありますか(年月のすべてのファイルが1つのzipにまとめられます)。
またはAutoITのようなスクリプトを使用する方が良いでしょうか
または、これを行うための既存のプログラムがあるので、コーディングする必要はありませんか?
解決
あなたの質問がジップ、特定の年/月、またはその両方からのファイルの選択に関するものかどうかわからない。
Zipの圧縮についてPeterは既に7-zipとSharpZipLibについて言及しました。私は個人的には後者の経験しかありませんが、すべてポジティブで、使いやすいです。
ファイルのグループ化については、フォルダー内のすべてのファイルを繰り返して、作成日または最終変更日でグループ化することで実行できます。
疑似:
var files = new Dictionary<DateTime, IList<string>>();
foreach (var file in Directory.GetFiles(...)) {
var fi = new FileInfo(file);
var date = fi.CreatedDate();
var groupDate = new DateTime(date.Year, date.Month);
if (!files.ContainsKey(groupDate)) files.Add(groupDate, new Collection<string>());
files[groupDate].Add(file);
}
今、あなたは明確な年/月キーとforeachキーを含む辞書をそのグループに属するファイルのリストに持っているはずです。 zip圧縮のため
疑似:
foreach (var entry in files) {
var date = entry.Key;
var list = entry.Value;
// create zip-file named date.ToString();
foreach (var file in list) {
// add file to zip
}
}
他のヒント
確かに、これを少しのC#と 7-zip または SharpZipLib 。
System.IO.Directory.GetFiles()を使用して各ディレクトリのファイルをループ処理し、ファイル名で解析して7-zipまたはSharpZipLibオブジェクトに追加できます。数千のファイルがある場合は、ファイル共有に負担をかけないように、一晩実行するサービスまたは何らかの種類のスケジュールされたタスクに投入するのが最善かもしれません。
おめでとうございます!
編集:補足として、作成日またはその他のファイル属性で解析する必要がある場合、各ファイルにSystem.IO.FileInfoオブジェクトを使用できます。