欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用C++實現(xiàn)監(jiān)控文件是否被修改

 更新時間:2024年02月04日 10:02:37   作者:草上爬  
軟件開發(fā)過程中經(jīng)常會用到配置文件,某些應用場景要求在軟件運行時動態(tài)修改配置文件,此時就需要監(jiān)控配置文件是否被修改,下面我們就來看看如何使用C++實現(xiàn)這一功能吧

軟件開發(fā)過程中經(jīng)常會用到配置文件,某些應用場景要求在軟件運行時動態(tài)修改配置文件,此時就需要監(jiān)控配置文件是否被修改,如果修改了,重新加載。

FileWatcher.h

#ifndef FILEWATCHER_H
#define FILEWATCHER_H
 
#include <ctime>
#include <chrono>
#include <string>
#include <thread>
#include <atomic>
 
typedef std::chrono::system_clock Clock;
typedef std::chrono::duration<long long, std::micro> Duration;
typedef std::chrono::time_point<Clock, Duration> Time;
 
template <typename FromDuration>
inline Time time_cast (std::chrono::time_point<Clock, FromDuration> const & tp)
{
    return std::chrono::time_point_cast<Duration, Clock> (tp);
}
 
inline Time now ()
{
    return time_cast(Clock::now ());
}
 
inline Time from_time_t (time_t t_time)
{
    return time_cast(Clock::from_time_t (t_time));
}
 
struct FileInfo
{
    Time mtime;
    off_t size;
};
 
class FileWatcher
{
public:
    FileWatcher(const std::string& file, unsigned int millis);
    ~FileWatcher();
 
protected:
    void run();
 
private:
    bool checkForFileModification();
    void updateLastModInfo();
    bool getFileInfo(FileInfo *fi, const std::string &name);
 
private:
    FileInfo m_lastFileInfo;
    std::string m_file;
    unsigned int const m_waitMillis;
    std::atomic_bool m_stopped;
    std::thread m_thread;
};
 
#endif // FILEWATCHER_H

FileWatcher.cpp

#include "FileWatcher.h"
#include "tchar.h"
#include "iostream"
 
FileWatcher::FileWatcher(const std::string& file, unsigned int millis)
    : m_file(file)
    , m_waitMillis(millis)
    , m_stopped(false)
    , m_thread(&FileWatcher::run, this)
{
    m_lastFileInfo.mtime = time_cast(Clock::now ());
    m_lastFileInfo.size = 0;
 
    updateLastModInfo();
}
 
FileWatcher::~FileWatcher()
{
     m_stopped = true;
     if (m_thread.joinable())
     {
         m_thread.join();
     }
}
 
void FileWatcher::run()
{
    while (!m_stopped)
    {
        bool modified = checkForFileModification();
        if(modified)
        {
            updateLastModInfo();
            std::cout << "File changed" << std::endl;
        }
 
        std::this_thread::sleep_for(std::chrono::milliseconds(m_waitMillis));
    }
}
 
bool FileWatcher::checkForFileModification()
{
    FileInfo fi;
 
    if (!getFileInfo(&fi, m_file) )
    {
        return false;
    }
 
    bool modified = fi.mtime > m_lastFileInfo.mtime
            || fi.size != m_lastFileInfo.size;
 
 
    return modified;
}
 
void FileWatcher::updateLastModInfo()
{
    FileInfo fi;
 
    if (getFileInfo(&fi, m_file))
    {
        m_lastFileInfo = fi;
    }
}
 
bool FileWatcher::getFileInfo(FileInfo *fi, const std::string &name)
{
    struct _stat fileStatus;
    if (_stat(name.c_str (), &fileStatus) == -1)
    {
        return false;
    }
 
    fi->mtime = from_time_t(fileStatus.st_mtime);
    fi->size = fileStatus.st_size;
 
    return true;
}

main.cpp

#include "FileWatcher.h"
 
#include <iostream>
 
int main(int argc, char *argv[])
{
    char filePath[1024] = {0};
    // 獲取絕對路徑.
    _fullpath(filePath, "config.txt", 1024);
    std::cout <<filePath << std::endl;
    FileWatcher fw(filePath, 1000);
    system("pause");
    
    return 0;
}

這里config.txt和可執(zhí)行文件同一目錄,每次修改config.txt,就會打印File changed

到此這篇關于使用C++實現(xiàn)監(jiān)控文件是否被修改的文章就介紹到這了,更多相關C++監(jiān)控文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++實現(xiàn)strcmp字符串比較的深入探討

    C++實現(xiàn)strcmp字符串比較的深入探討

    本篇文章是對使用C++實現(xiàn)strcmp字符串比較進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 一文帶你認識C語言的聯(lián)合體和枚舉

    一文帶你認識C語言的聯(lián)合體和枚舉

    聯(lián)合體(Union)是一種特殊的數(shù)據(jù)結(jié)構(gòu),允許在同一內(nèi)存地址上存儲不同類型的數(shù)據(jù),這篇文章主要給大家介紹了關于C語言聯(lián)合體和枚舉的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • C++實現(xiàn)LeetCode(73.矩陣賦零)

    C++實現(xiàn)LeetCode(73.矩陣賦零)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(73.矩陣賦零),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中數(shù)據(jù)的存儲詳解

    C語言中數(shù)據(jù)的存儲詳解

    這篇文章主要介紹了C語言中數(shù)據(jù)的存儲詳解的相關資料,需要的朋友可以參考下
    2023-08-08
  • 淺析C語言中對于char*和char[]的理解

    淺析C語言中對于char*和char[]的理解

    char * s 只是一個保存字符串首地址的指針變量,char a[]是許多連續(xù)的內(nèi)存單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本質(zhì),這篇文章主要介紹了C語言中對于char*和char[]的理解,需要的朋友可以參考下
    2023-02-02
  • C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)以實現(xiàn)函數(shù)間數(shù)據(jù)的傳遞和共享,下面這篇文章主要給大家介紹了關于C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • c++訪問私有private成員變量的常用方法

    c++訪問私有private成員變量的常用方法

    這篇文章主要介紹了c++訪問私有private成員變量的常用方法,需要的朋友可以參考下
    2020-08-08
  • C++二分查找算法實例

    C++二分查找算法實例

    這篇文章主要為大家詳細介紹了C++二分查找算法的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 全排列算法的原理和實現(xiàn)代碼

    全排列算法的原理和實現(xiàn)代碼

    這篇文章主要介紹了全排列算法的原理和實現(xiàn)代碼,全排列是將一組數(shù)按一定順序進行排列,如果這組數(shù)有n個,那么全排列數(shù)為n!個,需要的朋友可以參考下
    2014-08-08
  • C 語言基礎教程(我的C之旅開始了)[十]

    C 語言基礎教程(我的C之旅開始了)[十]

    C 語言基礎教程(我的C之旅開始了)[十]...
    2007-02-02

最新評論