学习MFC的过程中,建立了一个目录类来在操作目录的时候进行有关目录的相关操作
1.检测目录是否存在;
2.建立目录;
3.从文件名中提取目录名;
4.强制建立目录;
5.去除文件名末尾"/";
6.增加"/"到目录名;
以下代码参照了delphi中vcl的有关代码,MFC中可能存在相关的类,但我没有找到。
代码如下:
// Directory.h: interface for the CDirectory class.
//
//
#if !defined(AFX_DIRECTORY_H__F1C129FA_8FC5_4036_8CD0_1D43C5D25641__INCLUDED_)
#define AFX_DIRECTORY_H__F1C129FA_8FC5_4036_8CD0_1D43C5D25641__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CDirectory
{
public:
CDirectory();
virtual ~CDirectory();
//检测目录是否存在
static BOOL DirectoryExists(LPCTSTR lpszDirectory);
//建立目录
static BOOL CreateDir(LPCTSTR lpszDir);
//从文件名中提取目录名
static CString ExtractFilePath(LPCTSTR lpszFileName);
//强制建立目录
static BOOL ForceDirectories(CString& strDirectory);
//去除文件名末尾"/"
static void ExcludeTrailingPathDelimiter(CString& strDirectory);
//增加"/"到目录名
static void IncludeTrailingPathDelimiter(CString& strDirectory);
};
#endif // !defined(AFX_DIRECTORY_H__F1C129FA_8FC5_4036_8CD0_1D43C5D25641__INCLUDED_)
// Directory.cpp: implementation of the CDirectory class.
//
//
#include "stdafx.h"
#include "Directory.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
CDirectory::CDirectory()
{
}
CDirectory::~CDirectory()
{
}
BOOL CDirectory::DirectoryExists(LPCTSTR lpszDirectory)
{
DWORD dwRet=0;
dwRet=GetFileAttributes(lpszDirectory);
if (dwRet==-1)
{
return FALSE;
}
else
{
if (dwRet==FILE_ATTRIBUTE_DIRECTORY)
{
return TRUE;
}
else
{
return FALSE;
}
}
}
BOOL CDirectory::ForceDirectories(CString& strDirectory)
{
BOOL bRet=TRUE;
// CString strOut;
// CString str(lpszDirection);
if (strDirectory.GetLength()==0)
{
return FALSE;
}
if (strDirectory.Right(1)=="//")
{
strDirectory=strDirectory.Left(strDirectory.GetLength()-1);
}
if (strDirectory.GetLength()<3 || DirectoryExists(strDirectory) || strDirectory==ExtractFilePath(strDirectory))
{
return TRUE;
}
if (strDirectory.GetLength()==0 || DirectoryExists(strDirectory))
{
return TRUE;
}
if (ForceDirectories(ExtractFilePath(strDirectory))==TRUE && CreateDir(strDirectory)==TRUE)
{
return TRUE;
}
else
{
return FALSE;
}
}
CString CDirectory::ExtractFilePath(LPCTSTR lpszFileName)
{
CString strFile(lpszFileName);
CString strReturn;
strReturn=strFile.Left(strFile.ReverseFind('//'));
return strReturn;
}
BOOL CDirectory::CreateDir(LPCTSTR lpszDir)
{
return ::CreateDirectory(lpszDir,NULL);
}
void CDirectory::ExcludeTrailingPathDelimiter(CString& strDirectory)
{
if (strDirectory.Right(1)=="//")
{
strDirectory=strDirectory.Left(strDirectory.GetLength()-1);
}
}
void CDirectory::IncludeTrailingPathDelimiter(CString& strDirectory)
{
if (strDirectory.Right(1)!="//")
{
strDirectory+='//';
}
}