2010-12-01 7 views
5

ファイルが変更されているかどうかを確認したい場合は、それを再度ロードします。このために、私はどこにも行かない次のコードから始めました...ファイルのタイムスタンプをC++で

#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    struct stat st; 
    int ierr = stat ("readme.txt", &st); 
    if (ierr != 0) { 
      cout << "error"; 
    } 
    int date = st.st_mtime; 
    while(1){ 
      int newdate = st.st_mtime; 
      usleep(500000); 
      if (newdate==date){ 
        cout << "same file.. no change" << endl; 
      } 
      else if (newdate!=date){ 
        cout << "file changed" << endl; 
      } 
    } 
} 

すべてのコードは印刷同じファイルです。変更はありません。

+0

'のようになります。ここ); – ybungalobill

答えて

9

ループ外にstat()と呼んでいるからです。

stat()の結果は、その特定の時点で正しいです。それを確認するたびにstat()を再度呼び出す必要があります。

+0

:D ROTFL ... 申し訳ありません...ありがとう.. –

2

まあ、あなたはループの前にstatです。最初のstatで取得した情報は更新されません。呼び出しをstatに移動してwhileループに移動します。

0

Linuxを使用していて、そのプラットフォーム向けに具体的に記述している場合、継続的にポーリングするのではなく、ファイルが変更されたときに通知するためにinotifyを使用できます。

使用方法については、man inotifyを参照してください。

0

はい、whileループでstat呼び出しを移動する必要があります。 あなたのwhileループは、if(NEWDATE ==日付){...}他の場合(NEWDATE!=日付){...} `私は第三の可能性がありますので、それはだと思う。この

while(1){ 
    ierr = stat ("/Volumes/Backup/song.rtf", &st); 
    int newdate = st.st_mtime; 
    usleep(500000); 
    if (newdate==date){ 
     cout << "same file.. no change" << endl; 
    } 
    else if (newdate!=date){ 
     cout << "file changed" << endl; 
    } 
}