- PR -

複数の監視フォルダを制御する方法

1
投稿者投稿内容
Asoas
ベテラン
会議室デビュー日: 2006/03/10
投稿数: 60
投稿日時: 2009-02-10 00:01
<開発環境>
開発環境:VS2005 言語:C#.net

<概要>
現在、あるフォルダを監視し、そこに入ってくるファイル(pdf,tiff等)をファイル名で判別し、複数の登録されてあるフォルダに転送するツールを開発しています。
監視PGはWindowsサービスで開発しています。

<課題>
1.ファイル名を判別し、複数の登録フォルダに転送する仕組みですが、
ファイル名(先頭4桁のコード)と登録フォルダとをマッチングさせる
テーブルみたいなものが必要なのですが、現在DB(SQLServer)で実相を考えています。
しかし、もっと簡単な方法でこれを実現できないか、検討中です。
DB等をインストールさせたくないというのが、ホントのところです。

以下のようなマッチングテーブルが必要と考えています。
[監視先名称,監視先フォルダパス,4桁コード,登録名,登録転送先フォルダパス]

2.この後、監視先フォルダを増やすことになるかもしれません。
その際は、実装方法を上記とは根本的に変えないといけないと考えています。
DBを使用しての実装を検討しています。
その際、同時に複数のフォルダを監視し、登録されている同じ転送先フォルダに
転送する場合や同時に監視フォルダにファイルが入ってきた場合を考えると、
非同期の制御等を検討する必要があるのかなと考えています。

上記、1,2の課題に対して、何か良いアドバイスをお願いします。
よろしくお願いいたします。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2009-02-11 01:18
DataTableを使ってみてはいかがでしょう?DBのように扱うことができます。
http://msdn.microsoft.com/ja-jp/library/system.data.datatable(VS.80).aspx

サービス起動時にXMLなどからロードし初期化すればよいように思います。
Asoas
ベテラン
会議室デビュー日: 2006/03/10
投稿数: 60
投稿日時: 2009-02-12 18:27
GENZO様

ご回答有難うございます。
DataTableで、対応することにしました。

別途このツールの開発に当たって、以下の課題と質問があります。
どこに問題があるのでしょうか?また、どう対応すれば良いでしょうか?
教えて頂きたく。よろしくお願い致します。

[課題]
CSVファイルをDataTableに取りこんで、DataGridView上に表示させようとしてます。
しかし、うまく表示されません。
具体的には、CSVファイルの1行目(表題)がDataGridViewの項目に表示されません。
DataGridViewの1行目に表示されます。※"HDR=Yes"が効いていない。

また、CSVファイル自体をカンマ区切りしているのに、DataGridView上では全て1列目に表示されてしまいます。※FMT=Delimitedが効いていない。

コード
---------------------------------------------------------------------------
//CSVファイルのあるフォルダ
string csvDir = System.IO.Path.GetDirectoryName(txt_watch.Text.Trim());
//CSVファイルの名前
string csvFileName = System.IO.Path.GetFileName(txt_watch.Text.Trim());
//接続文字列
string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ csvDir + ";Extended Properties=\\"text;HDR=Yes;FMT=Delimited\\"";
System.Data.OleDb.OleDbConnection con =
new System.Data.OleDb.OleDbConnection(conString);

string commText = "SELECT * FROM [" + csvFileName + "]";
System.Data.OleDb.OleDbDataAdapter da =
new System.Data.OleDb.OleDbDataAdapter(commText, con);

//DataTableに格納する
DataTable dt = new DataTable();
da.Fill(dt);

//DataGridViewに表示する
dgv_match.DataSource = dt;
---------------------------------------------------------------------------

[質問]
このツールは、ファイル監視部分をWindowsサービスで開発していますが、UIでサービスの停止・開始 及び CSVの取り込みを実現したいと考えています。
よって一つのソリューション(sln)で、2つのプロジェクト(Winサービス,Winアプリ)を同時に開発しているのですが、Winサービスが参照するCSVパスとWinアプリ(UI)で参照・設定するConfigファイルは共有したいと考えています。

一方のプロジェクト(Winサービス)が保有するconfigファイルの内容を、もう一方のプロジェクト(Winアプリ)から参照・設定することはできるのでしょうか?
また、それ以外の方法で何か良い方法があるでしょうか?
よろしくお願い致します。

GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2009-02-13 00:34
引用:

Asoasさんの書き込み (2009-02-12 18:27) より:
[課題]
CSVファイルをDataTableに取りこんで、DataGridView上に表示させようとしてます。
しかし、うまく表示されません。
具体的には、CSVファイルの1行目(表題)がDataGridViewの項目に表示されません。
DataGridViewの1行目に表示されます。※"HDR=Yes"が効いていない。

また、CSVファイル自体をカンマ区切りしているのに、DataGridView上では全て1列目に表示されてしまいます。※FMT=Delimitedが効いていない。


ほぼサンプルコードそのままで実行してみましたが、DataGridViewにソレらしく表示されました。。。
こちらの使ったCSVは以下のとおりです。
コード:
監視先名称,監視先フォルダパス,4桁コード,登録名,登録転送先フォルダパス
あああ,d:/temp,1234,a001,c:/temp
いいい,c:/aaa,5678,b001,c:/aaa


なんとなくですが、CSVに問題があるような気がします。。。

引用:

[質問]
一方のプロジェクト(Winサービス)が保有するconfigファイルの内容を、もう一方のプロジェクト(Winアプリ)から参照・設定することはできるのでしょうか?
また、それ以外の方法で何か良い方法があるでしょうか?
よろしくお願い致します。


configというのは、xxx.exe.configのことですか?
configを共有するのではなく、共通設定を別xmlに定義するのはいかがでしょう?
XmlSerializerを利用すると簡単に復元することができます。
http://msdn.microsoft.com/ja-jp/library/system.xml.serialization.xmlserializer(VS.80).aspx
http://www.atmarkit.co.jp/fdotnet/easyxml/easyxml14/easyxml14_04.html

Asoas
ベテラン
会議室デビュー日: 2006/03/10
投稿数: 60
投稿日時: 2009-02-15 02:06
GENZO様

ご回答有難うございます。

[課題]CSVファイルのDataGridView上に表示
おっしゃる通り、CSVファイル側に問題がありました。
"SCHEMA.INI"が同フォルダに作成されていて、それが問題だったようです。
削除すると、問題なく表示されるようになりました。

ありがとうございました。

[質問]configファイルの異なるexeからの参照・設定

下記のConfigのどちらかを共有で使用したいと考えて質問しました。

(ex)"AAA.exe.config"をBBB.exeからも参照・設定可能。
WinサービスApp:AAA.exe / AAA.exe.config
WinApp:BBB.exe / BBB.exe.config

Properties.Settingsの使用方法等を色々調べましたが、やはり無理なのですかね?
できれば、便利だなと思い質問しました。
XmlSerializer勉強してみます。

ありがとうございました。













1

スキルアップ/キャリアアップ(JOB@IT)