详解C++循环创建多级目录及判断目录是否存在的方法

C++循环创建多级目录

#include "unitfiles.h" 

#ifdef WIN32 

#include <direct.h>
#include <io.h> 

#elif LINUX 

#include <stdarg.h>
#include <sys/stat.h> 

#endif 

#ifdef WIN32 

#define ACCESS _access
#define MKDIR(a) _mkdir((a)) 

#elif LINUX 

#define ACCESS access
#define MKDIR(a) mkdir((a),0755) 

#endif 

int CreatDir(char *pszDir)
{
  int i = 0;
  int iRet;
  int iLen = strlen(pszDir); 

  //在末尾加/
  if (pszDir[iLen - 1] != '\\' && pszDir[iLen - 1] != '/')
  {
    pszDir[iLen] = '/';
    pszDir[iLen + 1] = '\0';
  } 

  // 创建目录
  for (i = 0;i <= iLen;i ++)
  {
    if (pszDir[i] == '\\' || pszDir[i] == '/')
    {
      pszDir[i] = '\0'; 

      //如果不存在,创建
      iRet = ACCESS(pszDir,0);
      if (iRet != 0)
      {
        iRet = MKDIR(pszDir);
        if (iRet != 0)
        {
          return -1;
        }
      }
      //支持linux,将所有\换成/
      pszDir[i] = '/';
    }
  }
  return 0;
}

根据别人的结果进行了修改,需要注意的问题是参数不是const的,因此可以进行修改。

 C++判断指定目录是否存在

bool IsDirExist(string filename)
{
  size_t len = filename.length();
  if(filename[len-1] != '/' && filename[len-1] != '\\')
    filename.append("/");
  filename.append("000.tmp");
  ofstream outf(filename.c_str());
  bool flag = outf;
  if(outf)
  {
    outf.close();
    remove(filename.c_str());
  }
  return flag;
} 
(0)

相关推荐

  • c++判断是否为目录的示例分享

    复制代码 代码如下: #include<sys/stat.h>#include<unistd.h>int is_dir(char *path){  struct stat buf;  if(lstat(path , &buf) < 0){    return FALSE;  }  int ret = __S_IFDIR & buf.st_mode;  if(ret){    return TRUE;  }  return FALSE;}

  • C++实现读取特定路径下文件夹及文件名的方法

    本文所述实例代码主要实现读取给定路径下的所有文件夹名称或所有带后缀的文件名的功能.具体解决方法如下:   主要用到了以下几个头文件(类):io.h, fstream, string.   首先,读取某给定路径下所有文件夹与文件名称,并带完整路径.实现代码如下: void getAllFiles( string path, vector<string>& files) { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo;

  • C++遍历文件夹下文件的方法

    本文实例讲述了C++遍历文件夹下文件的方法.分享给大家供大家参考.具体如下: #include <windows.h> #include <stdio.h> #include <string.h> #define LEN 1024 // 深度优先递归遍历目录中所有的文件 BOOL DirectoryList(LPCSTR Path) { WIN32_FIND_DATA FindData; HANDLE hError; int FileCount = 0; char Fi

  • C++检查某个文件或目录是否存在的函数

    本文实例讲述了C++检查某个文件或目录是否存在的函数代码,分享给大家供大家参考.具体实现方法如下: #include <Windows.h> BOOL FileExists(LPCTSTR lpszFileName, BOOL bIsDirCheck) { //试图取得文件属性 DWORD dwAttributes = ::GetFileAttributesA(lpszFileName); if ( INVALID_FILE_ATTRIBUTES == dwAttributes) { retu

  • C/C++获取目录下的文件列表信息

    1.数据结构 复制代码 代码如下: struct dirent{    long d_ino;                 /* inode number 索引节点号 */    off_t d_off;                /* offset to this dirent 在目录文件中的偏移 */    unsigned short d_reclen;    /* length of this d_name 文件名长 */    unsigned char d_type;    

  • C++选择文件夹代码的封装

    本文实例讲述了C++选择文件夹代码的封装,分享给大家供大家参考.具体方法如下: 该实例分为DirDialog.h头文件与DirDialog.cpp源文件. DirDialog.h头文件代码如下: 复制代码 代码如下: #pragma once  #ifndef __DIRDIALOG_H_HH  #define __DIRDIALOG_H_HH #include <Shlobj.h> class CDirDialog  {  protected:      BROWSEINFO m_bi; 

  • C++删除指定文件夹下N天及之前日志文件的方法

    本文实例讲述了C++删除指定文件夹下N天及之前日志文件的方法.分享给大家供大家参考.具体如下: // 功能:删除nDays天及之前的日志文件 // @nDays: 0-不删除日志,3-删除3天及之前的日志(保留今天.昨天.前天的日志) ... void CRecordLog::ClearLog(UINT nDays) // 删除N天前的日志 { if (nDays > 0) { WIN32_FIND_DATA FindFileData; CString sAllFile = m_sLogFold

  • VC++ 使用 _access函数判断文件或文件夹是否存在

    _access函数 int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); 参数 path 文件或目录路径. mode 读/写特性. 返回值   如果文件包含特定模式,每个函数返回 0. 函数返回 - 1,则名称文件不存在或不具有特定模式:在这种情况下,如下表errno 所示设置. EACCES 访问被拒绝:文件权限的设置不允许指定的访问权限. ENOENT 未找到文件名或

  • C/C++中如何判断某一文件或目录是否存在

    1.C++很简单的一种办法: 复制代码 代码如下: #include <iostream>#include <fstream>using namespace std;#define FILENAME "stat.dat"int main(){     fstream _file;     _file.open(FILENAME,ios::in);     if(!_file)     {         cout<<FILENAME<<&

  • VC++获得当前进程运行目录的方法

    本文实例讲述了VC++获得当前进程运行目录的方法,分享给大家供大家参考.具体实现方法如下: 该实例主要通过利用windows API获得,具体代码如下: 复制代码 代码如下: CString GetAppPath() {   CString strAppPath;  // 保存结果   TCHAR szModuleFileName[MAX_PATH]; // 全路径名   TCHAR drive[_MAX_DRIVE];  // 盘符名称,比如说C盘啊,D盘啊   TCHAR dir[_MAX_

  • C++递归删除一个目录实例

    本文实例讲述了C++递归删除一个目录的实现方法.分享给大家供大家参考.具体方法如下: CFindFile的使用框架如下: 复制代码 代码如下: void Recurse(LPCTSTR pstr)  {     CFileFind finder;       // build a string with wildcards     CString strWildcard(pstr);     strWildcard += _T("\\*.*");       // start work

随机推荐