
ディレクトリに、データファイルを保存するプログラムを作成しました(perl)そのディレクトリに出力されたファイルを直後にDB登録したいのですが、どのような方法があるのか?考え中です。イメージですが
ディレクトリを監視して、ファイル作成されたらDB登録する。 というようなことが、出来るでしょうか? OSはRedhat DBはpostgresなのですが、いい方法ありましたら、よろしくお願い致します。
そのディレクトリは他のプログラムでも参照してるため、消したり移動出来ない事と、ファイル作成された直後に登録したのです。。
No.2ベストアンサー
- 回答日時:
ずっと動かし続けることができるのであれば
こんな感じではどうですか
#!perl
#監視するディレクトリ
$kansidir = "c:/xxx";
guruguru:
opendir(DIR, $kansidir);
@dir = grep (-f "$kansidir/$_" && !exists $sumifile{$_}, readdir(DIR));
closedir(DIR);
foreach (@dir) {
$sumifile{$_} = '';
#DB登録...
}
goto guruguru;

No.3
- 回答日時:
基本的には#2の方ような方法になると思いますが、以下の点を考慮すべきです。
1.ファイル名を取得した時、まだそのファイルが、書き込み中の可能性がある。従って、書き込みが完了したファイルのみを処理する必要がある。
2.DBに登録完了したファイル名を、2度と処理しないようにするにはどうするか。内部メモり(perlの変数)に処理済みのファイル名を格納する方法をとると、スクリプトを停止され、その後再起動すると、誤動作する。
3.処理を繰り返すときに一定時間スリープする。(sleepを使用する)
上記の問題に対する解決方法ですが、
1については、有効な決め手はありません。一定間隔で、ファイルの存在を確認したとき、そのファイルサイズも記憶し(stat関数で取得)、そのサイズが所定時間変化しなかった時、書き込み完了と見なす方法が考えられます。この所定時間は、書き込み処理と相談して、適切と思われる値にすべきです。(非常におおきければ、確実だがその分DBへの登録が送れる)
2については、処理済みとなったファイルを他のディレクトリに移動して良いならそれが、最も簡単な方法です。もし、移動が許されないなら、処理済みとなったファイル名を、その都度、別のファイルに書き込んでおき、スクリプトが立ち上がるとき、その別ファイル名を読み込み、記憶を取り戻すようにする必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FindFirstFileとFindNextFileで...
-
Windowsで複数のファイルを同じ...
-
vba dir の相対パス
-
Perl 時間同士の差
-
C++でのテキストファイル読み込...
-
バッチファイルの作り方(CSV→...
-
空白文字 \\f と\\v の違いに...
-
エクセルVBA コードが同じでも...
-
サブスクリプトとのファイルハ...
-
Pythonの再帰関数の動作の流れ...
-
大量メールの任意のヘッダだけ...
-
openした後、closeしないでプロ...
-
重複するデータを抽出できる秀...
-
至急お願いします。C言語で.img...
-
VBAでCSVファイルを途中行まで...
-
Perl Vlookupみたいに
-
全行読み込むには
-
csvファイルの横方向への改行に...
-
並び方、
-
drtファイルはどうしたら開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
FindFirstFileとFindNextFileで...
-
readdir()で得られるファイル・...
-
ディレクトリ名を取得したい
-
ディレクトリの判別
-
vba dir の相対パス
-
C言語でファイル名を取得
-
パスから最後のディレクトリだ...
-
複数ファイルの読み込みについて
-
chdirがうまくできない
-
dos変数の%~dp0は powershellで...
-
CGI::Sessionの使い方
-
コマンド「dir」の結果を、テキ...
-
エラー 'dir.h' : No such fi...
-
LinuxのC言語で、ファイル名の...
-
正規表現で、特定のファイル名...
-
フォルダの中身を知りたい
-
シンボリックリンクを検出でき...
-
makefileでファイルをコピー(...
おすすめ情報