Libuv檔案操作封裝
阿新 • • 發佈:2018-11-24
#ifndef __CUVFILE__H_ #define __CUVFILE__H_ #include "UvBase.h" class CUvFile : public CUvBase { public: CUvFile(); virtual ~CUvFile(); public: static void FsOperCb(uv_fs_t* pFileReq); public: int Open(std::string strFileName, int iFlags, int iMode); int Read(uv_file file, char* pData, unsigned int iDataLen, int64_t iOffset = 0); int Write(uv_file file, char* pData, unsigned int iDataLen, int64_t iOffset = 0); int Close(uv_file file); int Unlink(std::string strFilePath); int CopyFile(std::string strNewFileName, std::string strOldFileName, int iFlags); int Mkdir(std::string strFilePath, int iMode); int Mkdtemp(std::string strFilePath); int RmDir(std::string strFilePath); int ScanDir(std::string strFilePath, int iFlags); int Stat(std::string strFilePath); int Fstat(uv_file file); int Rename(std::string strNewFileName, std::string strOldFileName); int Fsync(uv_file file); int FdataSync(uv_file file); int Ftruncate(uv_file file, int64_t iOffset); int SendFile(uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length); int Access(std::string strFilePath, int iMode); int Chmod(std::string strFilePath, int iMode); int Utime(std::string strFilePath, double atime, double mtime); int FuTime(uv_file file, double atime, double mtime); int Lstat(std::string strFilePath); int Link(std::string strNewFileName, std::string strOldFileName); protected: virtual int OnOpen(uv_fs_t* pFileReq); virtual int OnRead(uv_fs_t* pFileReq); virtual int OnWrite(uv_fs_t* pFileReq); virtual int OnClose(uv_fs_t* pFileReq); virtual int OnAccess(uv_fs_t* pFileReq); virtual int OnMkdir(uv_fs_t* pFileReq); virtual int OnCustom(uv_fs_t* pFileReq); virtual int OnSendFile(uv_fs_t* pFileReq); virtual int OnStat(uv_fs_t* pFileReq); virtual int OnFstat(uv_fs_t* pFileReq); virtual int OnTruncate(uv_fs_t* pFileReq); virtual int OnUtime(uv_fs_t* pFileReq); virtual int OnFutime(uv_fs_t* pFileReq); virtual int OnChmod(uv_fs_t* pFileReq); virtual int OnFchmod(uv_fs_t* pFileReq); virtual int OnFsync(uv_fs_t* pFileReq); virtual int OnFdatasync(uv_fs_t* pFileReq); virtual int OnUnlink(uv_fs_t* pFileReq); virtual int OnRmdir(uv_fs_t* pFileReq); virtual int OnMkdtemp(uv_fs_t* pFileReq); virtual int OnRename(uv_fs_t* pFileReq); virtual int OnScanDir(uv_fs_t* pFileReq); virtual int OnLink(uv_fs_t* pFileReq); virtual int OnSymLink(uv_fs_t* pFileReq); virtual int OnReadLink(uv_fs_t* pFileReq); virtual int OnChown(uv_fs_t* pFileReq); virtual int OnFchown(uv_fs_t* pFileReq); virtual int OnRealPath(uv_fs_t* pFileReq); virtual int OnCopyFile(uv_fs_t* pFileReq); protected: uv_fs_t* mpFsReq; }; #endif #include "UvFile.h" CUvFile::CUvFile(){ mpFsReq = nullptr; } CUvFile::~CUvFile(){ uv_fs_req_cleanup(mpFsReq); } int CUvFile::OnOpen(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnOpen"); return 0; } int CUvFile::OnRead(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnRead"); return 0; } int CUvFile::OnWrite(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnWrite"); return 0; } int CUvFile::OnClose(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnClose"); return 0; } int CUvFile::OnAccess(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnAccess"); return 0; } int CUvFile::OnMkdir(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnMkdir"); return 0; } int CUvFile::OnCustom(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnCustom"); return 0; } int CUvFile::OnSendFile(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnSendFile"); return 0; } int CUvFile::OnStat(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnStat"); return 0; } int CUvFile::OnFstat(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFstat"); return 0; } int CUvFile::OnTruncate(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnTruncate"); return 0; } int CUvFile::OnUtime(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnUtime"); return 0; } int CUvFile::OnFutime(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFutime"); return 0; } int CUvFile::OnChmod(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnChmod"); return 0; } int CUvFile::OnFchmod(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFchmod"); return 0; } int CUvFile::OnFsync(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFsync"); return 0; } int CUvFile::OnFdatasync(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFdatasync"); return 0; } int CUvFile::OnUnlink(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnUnlink"); return 0; } int CUvFile::OnRmdir(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnRmdir"); return 0; } int CUvFile::OnMkdtemp(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnMkdtemp"); return 0; } int CUvFile::OnRename(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnRename"); return 0; } int CUvFile::OnScanDir(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnScanDir"); //TODO uv_fs_scandir_next return 0; } int CUvFile::OnLink(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnLink"); return 0; } int CUvFile::OnSymLink(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnSymLink"); return 0; } int CUvFile::OnReadLink(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnReadLink"); return 0; } int CUvFile::OnChown(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnChown"); return 0; } int CUvFile::OnFchown(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnFchown"); return 0; } int CUvFile::OnRealPath(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnRealPath"); return 0; } int CUvFile::OnCopyFile(uv_fs_t* pFileReq) { LOG_INFO("Enter CUvFile::OnCopyFile"); return 0; } void CUvFile::FsOperCb(uv_fs_t* pFileReq) { CUvFile* pUvFile = (CUvFile*)uv_handle_get_data((uv_handle_t*)pFileReq); if (nullptr != pUvFile) { switch (pFileReq->fs_type){ case UV_FS_CUSTOM: pUvFile->OnCustom(pFileReq); break; case UV_FS_OPEN: pUvFile->OnOpen(pFileReq); break; case UV_FS_CLOSE: pUvFile->OnClose(pFileReq); break; case UV_FS_READ: pUvFile->OnRead(pFileReq); break; case UV_FS_WRITE: pUvFile->OnWrite(pFileReq); break; case UV_FS_SENDFILE: pUvFile->OnSendFile(pFileReq); break; case UV_FS_STAT: pUvFile->OnStat(pFileReq); break; case UV_FS_FSTAT: pUvFile->OnFstat(pFileReq); break; case UV_FS_FTRUNCATE: pUvFile->OnTruncate(pFileReq); break; case UV_FS_UTIME: pUvFile->OnUtime(pFileReq); break; case UV_FS_FUTIME: pUvFile->OnFutime(pFileReq); break; case UV_FS_ACCESS: pUvFile->OnAccess(pFileReq); break; case UV_FS_CHMOD: pUvFile->OnChmod(pFileReq); break; case UV_FS_FCHMOD: pUvFile->OnFchmod(pFileReq); break; case UV_FS_FSYNC: pUvFile->OnFsync(pFileReq); break; case UV_FS_FDATASYNC: pUvFile->OnFdatasync(pFileReq); break; case UV_FS_UNLINK: pUvFile->OnUnlink(pFileReq); break; case UV_FS_RMDIR: pUvFile->OnRmdir(pFileReq); break; case UV_FS_MKDIR: pUvFile->OnMkdir(pFileReq); break; case UV_FS_MKDTEMP: pUvFile->OnMkdtemp(pFileReq); break; case UV_FS_RENAME: pUvFile->OnRename(pFileReq); break; case UV_FS_SCANDIR: pUvFile->OnScanDir(pFileReq); break; case UV_FS_LINK: pUvFile->OnLink(pFileReq); break; case UV_FS_SYMLINK: pUvFile->OnSymLink(pFileReq); break; case UV_FS_READLINK: pUvFile->OnReadLink(pFileReq); break; case UV_FS_CHOWN: pUvFile->OnChown(pFileReq); break; case UV_FS_FCHOWN: pUvFile->OnFchown(pFileReq); break; case UV_FS_REALPATH: pUvFile->OnRealPath(pFileReq); break; case UV_FS_COPYFILE: pUvFile->OnCopyFile(pFileReq); break; default: break; } } } int CUvFile::Open(std::string strFileName, int iFlags, int iMode) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_open(mpUvLoop, mpFsReq, strFileName.c_str(), iFlags, iMode, CUvFile::FsOperCb); } int CUvFile::Read(uv_file file, char* pData, unsigned int iDataLen, int64_t iOffset) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq && pData != nullptr && iDataLen > 0, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); uv_buf_t stBuf = uv_buf_init(pData, iDataLen); return uv_fs_read(mpUvLoop, mpFsReq, file, &stBuf, 1, iOffset, CUvFile::FsOperCb); } int CUvFile::Write(uv_file file, char* pData, unsigned int iDataLen, int64_t iOffset) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq && pData != nullptr && iDataLen > 0, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); uv_buf_t stBuf = uv_buf_init(pData, iDataLen); return uv_fs_write(mpUvLoop, mpFsReq, file, &stBuf, 1, iOffset, CUvFile::FsOperCb); } int CUvFile::Close(uv_file file) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_close(mpUvLoop, mpFsReq, file, CUvFile::FsOperCb); } int CUvFile::Unlink(std::string strFilePath) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_unlink(mpUvLoop, mpFsReq, strFilePath.c_str(), CUvFile::FsOperCb); } int CUvFile::CopyFile(std::string strNewFileName, std::string strOldFileName, int iFlags) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_copyfile(mpUvLoop, mpFsReq, strOldFileName.c_str(), strNewFileName.c_str(), iFlags, CUvFile::FsOperCb); } int CUvFile::Mkdir(std::string strFilePath, int iMode) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_mkdir(mpUvLoop, mpFsReq, strFilePath.c_str(), iMode, CUvFile::FsOperCb); } int CUvFile::Mkdtemp(std::string strFilePath) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_mkdtemp(mpUvLoop, mpFsReq, strFilePath.c_str(), CUvFile::FsOperCb); } int CUvFile::RmDir(std::string strFilePath) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_rmdir(mpUvLoop, mpFsReq, strFilePath.c_str(), CUvFile::FsOperCb); } int CUvFile::ScanDir(std::string strFilePath, int iFlags) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_scandir(mpUvLoop, mpFsReq, strFilePath.c_str(), iFlags, CUvFile::FsOperCb); } int CUvFile::Stat(std::string strFilePath) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_stat(mpUvLoop, mpFsReq, strFilePath.c_str(), CUvFile::FsOperCb); } int CUvFile::Fstat(uv_file file) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_fstat(mpUvLoop, mpFsReq, file, CUvFile::FsOperCb); } int CUvFile::Rename(std::string strNewFileName, std::string strOldFileName) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_rename(mpUvLoop, mpFsReq, strOldFileName.c_str(), strNewFileName.c_str(), CUvFile::FsOperCb); } int CUvFile::Fsync(uv_file file) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_fsync(mpUvLoop, mpFsReq, file, CUvFile::FsOperCb); } int CUvFile::FdataSync(uv_file file) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_fdatasync(mpUvLoop, mpFsReq, file, CUvFile::FsOperCb); } int CUvFile::Ftruncate(uv_file file, int64_t iOffset) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_ftruncate(mpUvLoop, mpFsReq, file, iOffset, CUvFile::FsOperCb); } int CUvFile::SendFile(uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_sendfile(mpUvLoop, mpFsReq, out_fd, in_fd, in_offset, length, CUvFile::FsOperCb); } int CUvFile::Access(std::string strFilePath, int iMode) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_access(mpUvLoop, mpFsReq, strFilePath.c_str(), iMode, CUvFile::FsOperCb); } int CUvFile::Chmod(std::string strFilePath, int iMode) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_chmod(mpUvLoop, mpFsReq, strFilePath.c_str(), iMode, CUvFile::FsOperCb); } int CUvFile::Utime(std::string strFilePath, double atime, double mtime) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_utime(mpUvLoop, mpFsReq, strFilePath.c_str(), atime, mtime, CUvFile::FsOperCb); } int CUvFile::FuTime(uv_file file, double atime, double mtime) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_futime(mpUvLoop, mpFsReq, file, atime, mtime, CUvFile::FsOperCb); } int CUvFile::Lstat(std::string strFilePath) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_lstat(mpUvLoop, mpFsReq, strFilePath.c_str(), CUvFile::FsOperCb); } int CUvFile::Link(std::string strNewFileName, std::string strOldFileName) { ASSERT_RET_VALUE(nullptr != mpUvLoop && nullptr != mpFsReq, 1); uv_fs_req_cleanup(mpFsReq); uv_handle_set_data((uv_handle_t*)mpFsReq, (void*)this); return uv_fs_link(mpUvLoop, mpFsReq, strOldFileName.c_str(), strNewFileName.c_str(), CUvFile::FsOperCb); }