
ディレクトリに、データファイルを保存するプログラムを作成しました(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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- AJAX RPA(PowerAutomate)の実装について 1 2023/07/31 13:46
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スクロールバーを左側に、又は...
-
テーブルの更新について
-
C言語でファイル名を取得
-
perlのNet::FTPで、ファイルか...
-
コマンド「dir」の結果を、テキ...
-
ディレクトリ内のCSVファイル一...
-
FindFirstFileとFindNextFileで...
-
Apache2.2環境でPerlで参照した...
-
vba dir の相対パス
-
Perlで フォルダ内の全て...
-
コマンドプロンプトのタブキー機能
-
VBAでCSVファイルを途中行まで...
-
ログに記録又は読み出す際、最...
-
close()で例外が投げられる理由
-
C言語で特定の行を抽出する方法...
-
openした後、closeしないでプロ...
-
MATLAB グローバル変数の宣言
-
空白文字 \\f と\\v の違いに...
-
awkスクリプトでダブルクォーテ...
-
エクセルVBA コードが同じでも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
vba dir の相対パス
-
readdir()で得られるファイル・...
-
ディレクトリの判別
-
FindFirstFileとFindNextFileで...
-
パスから最後のディレクトリだ...
-
dos変数の%~dp0は powershellで...
-
C言語でファイル名を取得
-
Perlで フォルダ内の全て...
-
makefileでファイルをコピー(...
-
LinuxのC言語で、ファイル名の...
-
下のディレクトリ(3つ)に含ま...
-
正規表現で、特定のファイル名...
-
chdirがうまくできない
-
Net::FTPを使いファイル一覧の...
-
ディレクトリ名を取得したい
-
ディレクトリのファイル作成を...
-
空白を含むディレクトリにある...
-
ファイル名をデータとして取り...
おすすめ情報