一个目录操作的类

来源:互联网 发布:java重写的快捷键 编辑:程序博客网 时间:2024/06/05 17:59

学习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+='//';
 }
}

原创粉丝点击