2016年7月26日火曜日

[C#] Fileシステムを利用したバックアッププログラム

こんにちは。明月です。
今日はFile扱うIOとContextメニューを利用してバックアッププログラムを作成します。


開発概要


我々がWindowOSでドキュメント作業、各種業務するときに急いで処理することによって、デスクトップ等にデータを移すことあるいは作成しておくことにすることでパソコンのファイル整理状況が悪くなる場合があります。(たまに仕事しながらデスクトップ画面にドキュメントでいっぱいになったことをみたことあります。その状況で仕事をすることが不思議だと思いました。)
そのたびにディレクトリを整理するしバックアップしてから仕事しますね。その時に筆者はファイル整理とファイルバックアップをマウスクリックの一つで整理をできれば、いいじゃないかだと思い出してプロジェクトを企画しました。


システム概要


プログラム開発言語は「C#」で開発します。
実行する方法はコンソールタイプで開発しますがExplorerのContextメニューに登録してメニューからクリックさせたらファイルやディレクトリを特定にバックアップパスにコピーあるいは移動します。


要件定義


Input システム Output 説明
Iniファイル Iniの環境ファイル読み込むモジュール - バックアップするパスとコピーかファイル移動かの区分する設定値がある環境ファイルを読み込むモジュール
- レジストリ管理モジュール ファイルやディレクトリのContextメニューにBackup追加 レジストリのContextメニューを修正および登録するモジュール
バックアップする対象のファイルやディレクトリ ファイルシステム 環境ファイルで設定されたバックアップパスにファイルをコピーあるいは移動 IOを利用してファイル移動およびコピー

実装


環境ファイルを読み込むモジュール(Iniタイプの環境ファイルを読み込む)

IniReader.cs

レジストリの中でContextメニューの項目ににBackupメニューを追加するモジュール。

バックアッププログラムで特定パラメタを入力するとレジストリ及び環境ファイルを生成するクラスです。


RegApply.cs

コンソールあるいはコンテクストメニューから選択する時にファイルをコピーおよび移動するモジュール

実際に本システムのメインクラスになりますが、環境ファイルからバックアップするパスを取得し、コンテクストメニューあるいはコンソールからバックアップするファイルかディレクトリのパスを受け取ってコピーまたは移動させるクラスです。


BackupCopy.cs

各種ユーティリティクラス

本システムのディレクト区切り文字、実行するパス、重要なドライブなどを取得するクラスです。


Util.cs

実行されるMainメソッドのモジュール

スタートポイントになるクラスですが、パラメタ検証、デバック処理などが実行されています。


Program.cs

VisualStuioに上のソースを実装してそのままにデバックすると下記のイメージの結果が表示されます。



環境設定


プロジェクトの「Bin」フォルダの「Debug」フォルダを開くと「BackupProgram.exe」がありますが、コンソール環境で「BackupProgram.exe Apply」の命令語を入れって実行するとレジストリ及び環境ファイルが生成されます。


「Apply」のパラメタを通って環境ファイルを生成すると該当プログラム「BackupProgram.exe」と同じフォルダに「config.ini」ファイルができたことを確認できます。


「config.ini」ファイル(環境ファイル)を開いて「BACKUP_DIR」キーをバッグアップするパスに設定、「TYPE」キーを「M」の場合はファイルを移動、「C」の場合はファイルをコピーすることに設定しまう。


実行


ファイルを選択してマウスの右クリックするとコンテクストメニューに「Backup」メニューが追加されることを確認できます。


ファイルと同じ通りにフォルダーを選択してマウスの右クリックするとコンテクストメニューに「Backup」メニューが追加されることを確認できます。


各ファイルとフォルダーのコンテクストメニューの「Backup」メニューをクリックすると上の環境ファイルに設定したバックアップパスにファイルをコピーあるいは移動することを確認できます。


ここまでがコンテクストメニューを経由するバックアップするシステムを開発から運用までの説明です。


Githubリンク - Contextメニューバックアップソース

zipファイルリンク - Contextメニューバックアップソース(zip)


前の投稿で勉強したファイルシステム(IO)から簡単なバックアップシステムを作成してみました。ファイルシステム(IO)を勉強する時にはIOだけでは何もできなさそうだったと思いましたが、コンテクストメニューを利用してIOだけでもバックアップシステムを作ることができます。
もちろん、市販プログラムと比べると性能の差があると思いますが、バックアップ機能だけでも十分に楽なプログラムを開発することができるというのがよいと思います。
一つの投稿で簡単に作成したプログラムなのでバグが結構多いと思いますが、このプログラムからもっと発展させてもっといいプログラムを作る方がいらっしゃればこのソースを遠慮なく利用してください。

筆者ももっと良いアイデアがあれば、本ブログを通って開発しながら投稿します。

0 件のコメント