ファイル完成まで監視する – プログラミング – Home

ファイル完成まで監視する
 
通知
すべてクリア

[解決済] ファイル完成まで監視する


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

環境:VS2005 OS:XP

あるディレクトリにファイルが作成され、それが完成するまで(例えば100Mのファイ
ル)監視したいと考えています。

FindFirstChangeNotification() でファイルの作成開始は検出できますが、
作成されている間にSleep()など使ってファイルサイズチェックして変化がなくなったら
完成としたいと思っていましたが、ファイル作成に時間がかかるときなど
うまくいかないときがあります。

API/方法とかありましたら教えてください。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

ファイルを作成する側のプログラムによっては不可能ではないかと。
例えばメモ帳で、「1行書いて上書き保存」を繰り返す場合とか。

もっと仕様を明確にした方がアドバイスが付きやすいと思うので、
下記のスレを読んだ後、具体的に何がしたいのか書いてみてはいかがでしょうか。

関連スレ
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200606/06060072.txt


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

関連すれ読みました。ありがとうございます。

他のアプリが作成するファイルを監視したいのです。
完成したら他のディレクトリにコピーするという感じです。

作成されるファイルはある程度サイズもわかっていて、
作成が終わるところでなんとかチェックしたいと考えています。

一回作成を始めると100M分ずっと書き込むのですが、
作成されているファイルのWIN32_FIND_DATAのデータの更新が
遅いような感じです。

余談ですが、WIN32_FIND_DATA はアクセスしたタイミングのファイル情報
を返すのでしょうか?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

完成時のファイルサイズは正確にはわからないのですよね(何バイト以上なら完成して
いる、とか)。
その監視対象のアプリには手を加えられないのでしょうか?


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

>一回作成を始めると100M分ずっと書き込むのですが、
作成始めたら、終了するまでずっとOPENしっぱなしで、
終了したら、CLOSEすると考えていいのかな?


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

このプログラムでファイルを作り、

int main()
{
int c = 0;
for (;;) {
FILE *fp = fopen(hoge.txt, a+);
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 100; j++)
fprintf(fp, 0123456789);
fprintf(fp, \n);
}
fclose(fp);
c++;
printf(c = %d ≒ %d MB\n, c, c);

Sleep(1000);
}
return 0;
}

このプログラムで監視してみた。

#include <iostream>
#include <windows.h>

void Sub()
{
char *fileName = hoge.txt;

static int size;
WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile(fileName, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) {
if (size != FindFileData.nFileSizeLow) {
size = FindFileData.nFileSizeLow;
std::cout << size : << size << std::endl;
}
FindClose(hFind);
}
}

int main()
{
for (;;) {
Sub();
Sleep(100);
}
return 0;
}

100MBまで試したけど、ファイルサイズをリアルタイムで得られた。
OSやマシンスペックなどによって更新が遅れる可能性も考えられるけど、
ファイルを作成しているアプリの方で、ファイルを閉じていないのではないか?


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

監視対象アプリは製品ですので手を加えられません。

ファイルオープンしっぱなしかといえば、
私もたいちうさんと同様のテストアプリで試していたのですが、
ファイルクローズしないとWIN32_FIND_DATAは更新されない
ようです。
ですので、こちらから書き込みで対象ファイルのファイルオープン失敗
してくれればと思っています。失敗しなかったら
別方向で検討したいと思います。

解決ではありませんがクローズします。
皆様ありがとうございました。


返信引用
Elly
 Elly
(@Elly)
ゲスト
結合: 17年前
投稿: 1
 

縺薙s縺ォ縺。縺ッ Very impressed surfing your place, keep working
01C <a href='http://sqjvui.com/phr/'>Classic Chevrolet New Jersey</a> * <a href='http://ombsxp.com/jwz/'>Air Canada Schedules</a> * <a href='http://sqjvui.com/kle/urpbz-wkq.html'>Air Canadal</a> * <a href='http://bfxdon.com/cwj/'>United Airlines Customer Service</a


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました