• vc文件操作汇总—支持wince


    一、判断文件及文件夹是否存在

    // 判断文件是否存在
    BOOL IsFileExist(const CString& csFile)
    {
        DWORD dwAttrib = GetFileAttributes(csFile);
        return INVALID_FILE_ATTRIBUTES != dwAttrib && 0 == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
    }
    // 判断文件夹是否存在
    BOOL IsDirExist(const CString & csDir)
    {
        DWORD dwAttrib = GetFileAttributes(csDir);
        return INVALID_FILE_ATTRIBUTES != dwAttrib && 0 != (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
    }
    // 判断文件或文件夹是否存在
    BOOL IsPathExist(const CString & csPath)
    {
        DWORD dwAttrib = GetFileAttributes(csPath);
        return INVALID_FILE_ATTRIBUTES != dwAttrib;
    }
    
    // 判断文件或文件夹是否存在
    BOOL IsPathExistEx(const CString & csPath)
    {
        WIN32_FILE_ATTRIBUTE_DATA attrs = { 0 };
        return 0 != GetFileAttributesEx(csPath, GetFileExInfoStandard, &attrs);
    }

    二、创建及删除目录

    // 创建目录
    BOOL CreateFolder(CString strPath) { SECURITY_ATTRIBUTES attrib; attrib.bInheritHandle
    = FALSE; attrib.lpSecurityDescriptor = NULL; attrib.nLength = sizeof(SECURITY_ATTRIBUTES); return ::CreateDirectory(strPath, &attrib); //return ::CreateDirectory(strPath,NULL); }
    // 删除目录及子目录 BOOL DeleteDirectory(CString DirName) {
    CString PUBPATH; PUBPATH = DirName; CFileFind tempFind; DirName += "\*.*"; BOOL IsFinded = (BOOL)tempFind.FindFile(DirName); while(IsFinded) { IsFinded = (BOOL)tempFind.FindNextFile(); if(!tempFind.IsDots()) { CString strDirName; strDirName += PUBPATH; strDirName += "\"; strDirName += tempFind.GetFileName(); if(tempFind.IsDirectory()) { DeleteDirectory(strDirName); } else { SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性 DeleteFile(strDirName); } } } tempFind.Close(); if(!RemoveDirectory(PUBPATH)) { return FALSE ; } return TRUE; }

    三、查看指定根目录下目录个数

    // 获取目录数
    int
    GetDirNum(CString strPath) { int nDirNum = 0; CFileFind tempFind; BOOL bFound; bFound = tempFind.FindFile(strPath + _T("\*.*")); while (bFound) { bFound = tempFind.FindNextFile(); if(!tempFind.IsDots()) { if(tempFind.IsDirectory())  // 判断是否为文件夹 nDirNum++; } } tempFind.Close(); return nDirNum; }

    四、文件记录操作

    // 文件末尾写入记录 (以时间为例)
    void
    WriteRecord(time_t tm, CString strRecordFilePath) { CTime ctm(tm); CString strTime = ctm.Format(_T("%Y-%m-%d %H_%M_%S")); CStdioFile stdioFile; if (stdioFile.Open(strRecordFilePath, CFile::modeWrite)) { stdioFile.SeekToEnd(); stdioFile.WriteString(strTime); stdioFile.Close(); } }
    // 读取第一条记录 CString ReadRecord(CString strRecordFilePath) { CString strFirstRecord
    = _T(""); CStdioFile stdioFile; if (stdioFile.Open(strRecordFilePath, CFile::modeReadWrite)) { stdioFile.SeekToBegin(); stdioFile.ReadString(strFirstRecord); stdioFile.Close(); } return strFirstRecord; }
    // 删除第一条记录
    void DeleteRecord(CString strRecordFilePath) { vector<CString> vecStr; CString strTemp; CStdioFile stdioFile; if (stdioFile.Open(strRecordFilePath, CFile::modeNoTruncate|CFile::modeRead)) { stdioFile.ReadString(strTemp); while (stdioFile.ReadString(strTemp)) { vecStr.push_back(strTemp); } stdioFile.Close(); stdioFile.Open(strRecordFilePath, CFile::modeCreate|CFile::modeWrite); for (int i = 0; i < (int)vecStr.size(); i++) { stdioFile.WriteString(vecStr[i]); } stdioFile.Close(); } }

    五、CCeFileFind — wince

      由于wince中不支持CFileFind,在此提供网上查找的CCeFileFind类,经过实践证明可用。

    //================================头文件===================================
    #if !defined _CEFILEFIND_H_
    #define _CEFILEFIND_H_
    // CeFileFind.h : header file
    #include <afxwin.h>
    /////////////////////////////////////////////////////////////////////////////
    // CCeFileFind window
    class CCeFileFind : public CWnd
    {
        // Construction
    public:
        CCeFileFind( );
    public:
        // Operations
        void Close();
        virtual BOOL FindNextFile( );
        virtual BOOL FindFile( LPCTSTR pstrName = NULL);
    public:
        // Attributes
        //Gets the length of the found file, in bytes.
        DWORD GetLength() const;
        //Gets the name, including the extension, of the found file
        CString GetFileName() const;
        //Gets the whole path of the found file.
        CString GetFilePath() const;
        //Gets the whole path of the found file.
        CString GetRoot() const;
        // to get the time the specified file was created
        virtual BOOL GetCreationTime( FILETIME* pFileTime ) const;
        virtual BOOL GetCreationTime( CTime& refTime ) const;
        //Gets the time that the file was last accessed.
        virtual BOOL GetLastAccessTime( CTime& refTime ) const;
        virtual BOOL GetLastAccessTime( FILETIME* pFileTime ) const;
        //Gets the time the file was last changed and saved.
        virtual BOOL GetLastWriteTime( FILETIME* pFileTime ) const;
        virtual BOOL GetLastWriteTime( CTime& refTime ) const;
        //Indicates the desired file attributes of the file to be found.
        virtual BOOL MatchesMask( DWORD dwMask ) const;
        //Determines if the name of the found file has the name "." or "..",
        //indicating that is actually a directory.
        virtual BOOL IsDots( ) const;
        //Determines if the found file is read-only.
        BOOL IsReadOnly( ) const;
        //Determines if the found file is a directory.
        BOOL IsDirectory( ) const;
        //Determines if the found file is compressed.
        BOOL IsCompressed( ) const;
        //Determines if the found file is a system file.
        BOOL IsSystem( ) const;
        //Determines if the found file is hidden.
        BOOL IsHidden( ) const;
        //Determines if the found file is temporary.
        BOOL IsTemporary( ) const;
        //Determines if the found file is normal (in other words, has no other attributes).
        BOOL IsNormal( ) const;
        //Determines if the found file is archived.
        BOOL IsArchived( ) const;
        // Implementation
    public:
        virtual ~CCeFileFind();
    private:
        LPWIN32_FIND_DATA m_pfiledata;
        LPWIN32_FIND_DATA m_pNextdata;
        CString m_csRoot;
        HANDLE m_hFileHandle;
        char m_chDirSeparator;
        void AssertDoneNext() const;
    };
    #endif // !defined _CEFILEFIND_H_
    //====================================源文件===============================
    // CeFileFind.cpp : implementation file
    //
    #include "stdafx.h"
    #include "CeFileFind.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define DELETE_POINTER(ptr) if( ptr != NULL ) 
    { 
        delete ptr; 
        ptr = NULL; 
    }
    #define DIR_SEPERATOR '\'
    /////////////////////////////////////////////////////////////////////////////
    // CCeFileFind
    CCeFileFind::CCeFileFind()
    :m_hFileHandle(NULL), // initialize to NULL
    m_pfiledata(NULL)
    {
    }
    CCeFileFind::~CCeFileFind()
    {
        Close();
    }
    // Operations
    BOOL CCeFileFind::FindFile(LPCTSTR pstrName)
    {
        //Close();
        // if NULL , wild card search
        if( NULL == pstrName )
        {
            m_csRoot = DIR_SEPERATOR;
            pstrName = _T("\*.*");
        }
        else
        {
            m_csRoot = pstrName;
            int nPos = m_csRoot.ReverseFind( '\' );
            if( nPos == 0 )
                m_csRoot = '\';
            else
                m_csRoot = m_csRoot.Left( nPos );
        }
        m_pNextdata = new WIN32_FIND_DATA;
        // search for file
        m_hFileHandle = FindFirstFile( pstrName, m_pNextdata );
        if ( m_hFileHandle == INVALID_HANDLE_VALUE )
        {
            Close();
            return FALSE;
        }
        // file was found
        return TRUE;
    }
    BOOL CCeFileFind::FindNextFile()
    {
        ASSERT(m_hFileHandle != NULL);
        if (m_hFileHandle == NULL)
            return FALSE;
        if (m_pfiledata == NULL)
            m_pfiledata = new WIN32_FIND_DATA;
        AssertDoneNext();
        LPWIN32_FIND_DATA pTemp = m_pfiledata;
        m_pfiledata = m_pNextdata;
        m_pNextdata = pTemp;
        return ::FindNextFile(m_hFileHandle, m_pNextdata);
    }
    void CCeFileFind::Close()
    {
        DELETE_POINTER( m_pfiledata );
        DELETE_POINTER( m_pNextdata );
        if( m_hFileHandle!= NULL && m_hFileHandle !=
            INVALID_HANDLE_VALUE )
        {
            ::FindClose( m_hFileHandle );
            m_hFileHandle = NULL;
        }
    }
    BOOL CCeFileFind::MatchesMask(DWORD dwMask) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if ( m_pfiledata != NULL)
            return (!!(m_pfiledata->dwFileAttributes & dwMask) );
        else
            return FALSE;
    }
    CString CCeFileFind::GetRoot() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
            return m_csRoot;
        else
            return CString("");
    }
    BOOL CCeFileFind::GetLastAccessTime(FILETIME* pTimeStamp) const
    {
        ASSERT(m_hFileHandle != NULL);
        ASSERT(pTimeStamp != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL && pTimeStamp != NULL)
        {
            *pTimeStamp = m_pfiledata -> ftLastAccessTime;
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::GetLastWriteTime(FILETIME* pTimeStamp) const
    {
        ASSERT(m_hFileHandle != NULL);
        ASSERT(pTimeStamp != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL && pTimeStamp != NULL)
        {
            *pTimeStamp = m_pfiledata -> ftLastWriteTime;
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::GetCreationTime(FILETIME* pTimeStamp) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL && pTimeStamp != NULL)
        {
            *pTimeStamp = m_pfiledata -> ftCreationTime;
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::GetLastAccessTime(CTime& refTime) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            refTime = CTime( m_pfiledata -> ftLastAccessTime );
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::GetLastWriteTime(CTime& refTime) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            refTime = CTime( m_pfiledata -> ftLastWriteTime );
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::GetCreationTime(CTime& refTime) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            refTime = CTime( m_pfiledata -> ftCreationTime );
            return TRUE;
        }
        else
            return FALSE;
    }
    BOOL CCeFileFind::IsDots() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        // return TRUE if the file name is "." or ".." and
        // the file is a directory
        BOOL bResult = FALSE;
        if (m_pfiledata != NULL && IsDirectory())
        {
            LPWIN32_FIND_DATA pFindData = m_pfiledata;
            if (pFindData->cFileName[0] == '.')
            {
                if (pFindData->cFileName[1] == '' ||
                    (pFindData->cFileName[1] == '.' &&
                    pFindData->cFileName[2] == ''))
                {
                    bResult = TRUE;
                }
            }
        }
        return bResult;
    }
    BOOL CCeFileFind::IsArchived( ) const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsCompressed() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes ==
                FILE_ATTRIBUTE_COMPRESSED )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsDirectory() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsHidden() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_HIDDEN )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsNormal() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_NORMAL )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsReadOnly() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_READONLY )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsSystem() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_SYSTEM )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    BOOL CCeFileFind::IsTemporary() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
        {
            if( m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY )
                return TRUE;
            else
                return FALSE;
        }
        return FALSE;
    }
    CString CCeFileFind::GetFilePath() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        CString csResult = m_csRoot;
        if (csResult[csResult.GetLength()-1] != DIR_SEPERATOR )
            csResult += DIR_SEPERATOR;
        csResult += GetFileName();
        return csResult;
    }
    CString CCeFileFind::GetFileName() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        CString ret;
        if (m_pfiledata != NULL)
            ret = m_pfiledata->cFileName;
        return ret;
    }
    DWORD CCeFileFind::GetLength() const
    {
        ASSERT(m_hFileHandle != NULL);
        AssertDoneNext();
        if (m_pfiledata != NULL)
            return m_pfiledata -> nFileSizeLow;
        else
            return 0;
    }
    void CCeFileFind::AssertDoneNext() const
    {
        // if you trip the ASSERT in the else side, you've called
        // a Get() function without having done at least one
        // FindNextFile() call
        if (m_hFileHandle == NULL)
            ASSERT( m_pfiledata == NULL && m_pNextdata == NULL);
        else
            ASSERT( m_pfiledata != NULL && m_pNextdata != NULL);
    }
  • 相关阅读:
    集训队作业2018人类的本质
    推式子小技巧
    [Codeforces671D]Roads in Yusland
    线性规划的对偶问题
    数学虐哭空巢老人记
    Voronoi图与Delaunay三角剖分
    [ZJOI2018]保镖
    [SPOJ2939]Qtree5
    数据结构虐哭空巢老人记
    [CTSC2006]歌唱王国
  • 原文地址:https://www.cnblogs.com/wjc-blog/p/9687425.html
Copyright © 2020-2023  润新知