Dip.PicoLix
ピコリックス
Crenazumina BBS picolixホームへ
.....

[home]>[Crenzumina BBS]



| 一覧に戻る|

2004.01.22 Thu 22:56
フォルダ監視機能について  (カワバタ)
 
 こんにちは。
 現在、フォルダを監視して、もしフォルダに新規ファイルが作成されたら、そのファイルをメール送信できることができないかということを調べています。
 具体的には、サーバーアプリケーションで作成されるCSVファイルを、作成される都度メール送信できたらいいと思っています。
 サーバーアプリケーションにメール送信機能があればいいのですが、ないものですから...
 SMAILを使って、このような動作をさせることはできるのでしょうか。
 また、何かよりアイディアがあったらお教えください。
 では。

2004.01.22 Thu 23:55
re: フォルダ監視機能について  (Eva(管理人))
 
 こんにちは。Evaです。
 
 【現在、フォルダを監視して、もしフォルダに新規ファイルが作成されたら、そのファイルをメール送信できることができないかということを調べています。
 
 ほとんど似たようなしくみをSAMILを利用して構築しております。
 
 フォルダ監視
  −>LOGが生成される
   −>LOG中のあるキーワードをチェック
    −>該当キーワードがあれば、そのLOG内容をさらに切り出して、SMAILで添付送信する。
 
 ・当方は、フォルダ監視をNT/2000/XPのサービスプログラムを作って、該当の事象が発生したらSMAIL.EXEを呼び出しています。
 
  ※サービスプログラムにする理由は、ご承知のようにWindowsにログインしなくても
   自動起動させるためです。Windowsにログインしてもいいなら、普通にSMAILを呼び出す
   プログラムを作って、startupに入れておけばOKです。

2004.02.16 Mon 10:35
re: フォルダ監視機能について  (Arechi)
 
 私も同じようなことを探していてこのページを見つけました。
 でも初心者なのでWindowsでフォルダを監視する方法がわかりません。
 詳しく教えて頂けないでしょうか?

2004.02.18 Wed 22:08
re: フォルダ監視機能について  (Eva(管理人))
 
 こんにちは。
 【詳しく教えて頂けないでしょうか?
 フリーのツールがあればそれを利用すればいいのですが、なければ
 VCやVB等でファイル操作関連のプログラムを作ることになります。
 また、常時監視するので、プログラム中で監視ループするか、
 ATコマンドなどのスケジュールにプログラムを登録して使用するかになります。
 perl(ActivePerl) http://www.activestate.com/ActivePerl/
 を導入すれば、perl言語でプログラミングできます。
 監視系、夜間バッチ系は、当方はperlでプログラミングしています。
 −>UNIX系のプログラムとほぼ同じなので。
 
 いずれにしても、WINDOWSのプログラミングの知識が必要です。
 
 [参考に c のプログラムソースを載せておきます。]
 
 下記のconsoleプログラムをATコマンドで5分に1回実行するようにします。
 d:\common\csv\以下に*.txtが生成されたら、それをsmailで添付送信するプログラムです。
 同様のことをperlで書けば、多分10行ぐらいでかけます。
 
 
 /* Programed By Eva                 */
 #include <windows.h>
 #include <stdio.h>
 #include <process.h>
 
 #define MAX_FILES 100
 
 char file_name[MAX_FILES][100];
 
 main(int argc,char *argv[])
 {
 int i,j,k;
  int count;
 
  HANDLE          hFind;
     WIN32_FIND_DATA fd;
     BOOL            bRet = TRUE;
  char str[120];
  char dir[120];
  char dir_smail[120];
 
  sprintf(dir,"d:\\common\\csv\\");
  sprintf(dir_smail,"d:\\apps\\service\\smail.exe");
 
  count = 0;
  // ファイルチェック
  sprintf(str,"%s\\*.txt",dir);
  hFind = FindFirstFile( str, &fd );
     while ( hFind != INVALID_HANDLE_VALUE && bRet ){
   sprintf(str,"%s",fd.cFileName);
   if(str[0] != '.'){
  sprintf(&file_name[count][0],"%s",str);
  count++;
  if(count >= MAX_FILES){
  break; // 次のインターバルで残りをチェック
  }
  bRet = FindNextFile( hFind, &fd );
   }
  }
     FindClose( hFind );
 
  printf("%d\n",count);
  for(i = 0 ; i < count ; i++){
  sprintf(str,"-F%s%s",dir,&file_name[i][0]);
  printf("%s\n",str);
  _spawnlp(_P_WAIT,dir_smail,"smail","-hmailhost","-feva","-s\"TEST\"",str,"xxxxx@xxxxx.xx.xx",0); 
  remove(&file_name[i][0]);
  }
 }