2010-12-01 110 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

`如果(newdate ==日期){...}否則,如果(newdate!=日期){...}`我認爲這是因爲有第三種可能性這裏;) – ybungalobill 2010-12-01 10:09:46

回答

9

這是因爲你在迴路外面呼叫stat()

stat()的結果在該特定時刻正確。你每次需要檢查時都需要再次調用stat()。

+0

:D ROTFL ... 對不起,感謝.. – 2010-12-01 09:53:51

2

那麼,你在stat之前的循環。您通過初始stat獲得的信息從不更新。將呼叫移至statwhile循環中。

0

如果您在Linux上並專門爲該平臺編寫代碼,則可以使用inotify在文件更改時通知您而不是持續輪詢它。

請參閱man inotify以瞭解如何使用。

0

是的,你必須在while循環中移動統計調用。 while循環應該是這樣的

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; 
    } 
}