头文件
#ifndef MYFSO_H #define MYFSO_H
// INCLUDES #include <e32base.h> // for CActive
// FORWARD DECLARATIONS class RFs;
// CLASS DECLARATION
/** * CMyFSO container control class. * */ class CMyFSO : public CActive { public: // public interface class MObserver { public: virtual void OnChangeL(TInt aError,const TDesC& aFileName)=0; };
public: // constructor and destructor static CMyFSO* NewL(MObserver& aObserver); ~CMyFSO(); void SetWatchDir(const TDesC& aDir); // 设置检测的文件路径
public: // new methods void NotifyAllChanges();
protected: // from CActive void DoCancel(); void RunL();
private: // constructors CMyFSO(MObserver& aObserver); void ConstructL();
private: // member variables MObserver& iObserver; RFs& iFs; TFileName iWatchDir; };
#endif
// End of File
源文件:
// INCLUDE FILES #include <f32file.h> #include <coemain.h> #include <pathinfo.h>
#include "MyFSO.h"
// ================= MEMBER FUNCTIONS =======================
CMyFSO* CMyFSO::NewL(MObserver& aObserver) { CMyFSO* myFso = new(ELeave) CMyFSO(aObserver); CleanupStack::PushL(myFso); myFso->ConstructL(); CleanupStack::Pop(); return myFso; }
CMyFSO::~CMyFSO() { Cancel(); }
void CMyFSO::NotifyAllChanges() { Cancel(); //iFs.NotifyChange(ENotifyAll, iStatus); //iWatchDir=PathInfo::MemoryCardRootPath(); //iWatchDir.Append(PathInfo::ImagesPath()); iFs.NotifyChange(ENotifyWrite,iStatus,iWatchDir); SetActive(); }
void CMyFSO::DoCancel() { iFs.NotifyChangeCancel(); }
void CMyFSO::RunL() { iObserver.OnChangeL(iStatus.Int(),iWatchDir); }
CMyFSO::CMyFSO(MObserver& aObserver) : CActive(CActive::EPriorityStandard), iObserver(aObserver), iFs(CCoeEnv::Static()->FsSession()) { }
void CMyFSO::ConstructL() { CActiveScheduler::Add(this); }
void CMyFSO::SetWatchDir(const TDesC& aDir) { iWatchDir=aDir;
}
// End of File