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

// 判断文件是否存在
BOOL IsFileExist(const CString& csFile)
{
DWORD dwAttrib = GetFileAttributes(csFile);
return INVALID_FILE_ATTRIBUTES != dwAttrib && == (dwAttrib & FILE_ATTRIBUTE_DIRECTORY);
}
// 判断文件夹是否存在
BOOL IsDirExist(const CString & csDir)
{
DWORD dwAttrib = GetFileAttributes(csDir);
return INVALID_FILE_ATTRIBUTES != dwAttrib && != (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 = { };
return != 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 = ;
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 = ; 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 == )
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[] == '.')
{
if (pFindData->cFileName[] == '\0' ||
(pFindData->cFileName[] == '.' &&
pFindData->cFileName[] == '\0'))
{
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()-] != 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 ;
}
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);
}

vc文件操作汇总—支持wince的更多相关文章

  1. VC文件操作

    VC文件操作 重命名文件: 注意: 该操作对文件夹一样有效! CFileFind Finder; CString sOldPath = _T("D:\\tt.txt"); CStr ...

  2. VC++文件操作之最全篇

    一.剖析VC中的文件操作 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分 ...

  3. python文件操作汇总day7

    Python处理文件 文件操作分为读.写.修改,我们先从读开始学习 读文件 示例1: f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='r',enc ...

  4. python文件操作汇总

    1.创建文件 f = open(filename,'w+')

  5. c++对文件操作的支持(一)

    #include <stdio.h> #include <iostream> #include <fstream> using namespace std; voi ...

  6. c++对文件操作的支持(二)

    #include <stdio.h> #include <iostream> #include <fstream> using namespace std; voi ...

  7. 4 文件操作 支持图片 视频 mp3 文本等

    #文件操作:send_file,支持图片 视频 mp3 文本等@app.route("/img")def img(): return send_file("1.jpg&q ...

  8. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

  9. C# 文件操作总结

    一.需求分析 1.将信息记录到本地记事本中. 2.将记录的信息读取出来. 3.计算出某个文件夹下所有后缀名为txt的数量和dll的数量. 4.从网络上下载文件. 二.二话不说上代码 using Sys ...

随机推荐

  1. [转] 【iOS基础知识】之判断NSString是否为整数、浮点数

    //判断是否为整形: - (BOOL)isPureInt:(NSString*)string{ NSScanner* scan = [NSScannerscannerWithString:string ...

  2. 社交系统ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台配置

    什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案. 本文分享下利用 Laravel 的 Bootstrapp ...

  3. Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题

    Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa05 ...

  4. jquery jtemplates.js模板渲染引擎的详细用法第三篇

    jquery jtemplates.js模板渲染引擎的详细用法第三篇 <span style="font-family:Microsoft YaHei;font-size:14px;& ...

  5. css3中-moz、-ms、-webkit、-o

    -moz代表firefox浏览器私有属性-ms代表IE浏览器私有属性-webkit代表chrome.safari私有属性-o代表opera私有属性

  6. STP-8-RSTP中的提议/同意过程

    连接中断原因也可能是增加了新的链路,导致其中一台交换机重新选举根端口,最终认为新链路所连端口是根端口,RSTP在点到点链路上使用提议/同意(Proposal/Agreement)过程,让类似这种链路迅 ...

  7. sonar扫描android项目配置 mac版

    一. 下载安装 JDK8以上  SonarQube   SonarQube Scanner 1. 解压缩SonarQube和SonarQube Scanner,直接运行SonarQube中bin目录下 ...

  8. Django模板语言,过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  9. Oracle更新表字段时内容中含有特殊字符&的解决方法

    今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...

  10. Redis 基础特性讲解

    目录 1.Redis基础杂项小节 1.是什么 2.能干嘛 3.去哪下 4.Redis启动后基础知识讲解 2.Redis数据类型 1.常用的五大数据类型 2.高级'玩家'才知道的其他数据类型 3.Red ...