您的位置:首页 > 其它

文件读写时注意的细节问题

2009-10-24 16:26 369 查看
目录是否存在检查:


BOOL FolderExist(CString strPath)
{
WIN32_FIND_DATA wfd;
BOOL rValue = FALSE;
HANDLE hFind = FindFirstFile(strPath, &wfd);
if ((hFind!=INVALID_HANDLE_VALUE) &&
(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
{
rValue = TRUE;
}
FindClose(hFind);
return rValue;
}

文件存在性检查:
注意,该函数是检查当前目录下是否有该文件
如果想检查其他目录下是否有该文件,则在参数中输入该文件的完整路径即可

BOOL FileExist(CString strFileName)
{
CFileFind fFind;
return fFind.FindFile(strFileName);
}

创建目录:

BOOL CreateFolder(CString strPath)
{
SECURITY_ATTRIBUTES attrib;
attrib.bInheritHandle = FALSE;
attrib.lpSecurityDescriptor = NULL;
attrib.nLength = sizeof(SECURITY_ATTRIBUTES);
//上面定义的属性可以省略
//直接使用return ::CreateDirectory(path, NULL);即可
return ::CreateDirectory(strPath, &attrib);
}


文件大小:
DWORD GetFileSize(CString filepath)
{
WIN32_FIND_DATA fileInfo;
HANDLE hFind;
DWORD fileSize;
CString filename;
filename = filepath;
hFind = FindFirstFile(filename,&fileInfo);
if(hFind != INVALID_HANDLE_VALUE)
fileSize = fileInfo.nFileSizeLow;

FindClose(hFind);
return filesize;
}

当然在CFileFind里面有GetLength()函数,也可以求得。

文件夹大小
DWORD CVCTestDlg::GetDirSize(CString strDirPath)
{
CString strFilePath;
DWORD dwDirSize = 0;

strFilePath += strDirPath;
strFilePath += "//*.*";

CFileFind finder;
BOOL bFind = finder.FindFile(strFilePath);
while (bFind)
{
bFind = finder.FindNextFile();
if (!finder.IsDots())
{
CString strTempPath = finder.GetFilePath();
if (!finder.IsDirectory())
{
dwDirSize += finder.GetLength();
}
else
{
dwDirSize += GetDirSize(strTempPath);
}
}
}
finder.Close();
return dwDirSize;
}

{
TCHAR szDir[MAX_PATH] = {NULL};
GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir);
LPTSTR lptFileName="TsTestFunction.exe";
LPTSTR lptPath=szDir;
LPTSTR *lptFilePath=&lptFileName;
DWORD dFlag=GetFullPathName(lptFileName,sizeof(szDir)/sizeof
(TCHAR),lptPath,lptFilePath);
// 执行完上述语句,lptFileName、lptPath、lptFilePath将会得到正确结果
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: