
ディレクトリに、データファイルを保存するプログラムを作成しました(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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba dir の相対パス
-
readdir()で得られるファイル・...
-
Windowsで複数のファイルを同じ...
-
正規表現で、特定のファイル名...
-
FindFirstFileとFindNextFileで...
-
ディレクトリの判別
-
Perl 特定のフォルダ以外削除
-
LinuxのC言語で、ファイル名の...
-
Perlで フォルダ内の全て...
-
エラー 'dir.h' : No such fi...
-
dos変数の%~dp0は powershellで...
-
空白を含むディレクトリにある...
-
テキストファイルの結合
-
find関数が1階層(カレントディ...
-
ディレクトリ内の全ファイルを...
-
batファイルでrenameができませ...
-
ファイル名と更新日付の取得に...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
readdir()で得られるファイル・...
-
C言語でファイル名を取得
-
ディレクトリ名を取得したい
-
FindFirstFileとFindNextFileで...
-
dos変数の%~dp0は powershellで...
-
パスから最後のディレクトリだ...
-
vba dir の相対パス
-
サーバーにある特定の拡張子フ...
-
makefileでファイルをコピー(...
-
Perlで フォルダ内の全て...
-
chdirがうまくできない
-
ディレクトリ内の全ファイルを...
-
空白を含むディレクトリにある...
-
ディレクトリの判別
-
Net::FTPを使いファイル一覧の...
-
Windows漢字フォルダ名の扱い(...
-
エラー 'dir.h' : No such fi...
-
スクロールバーを左側に、又は...
おすすめ情報