详解C++循环创建多级目录及判断目录是否存在的方法_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;
} 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
目录
java ftp创建多级目录、linux创建多级目录、java创建多级目录、mkdir创建多级目录、python 创建多级目录,以便于您获取更多的相关知识。

时间: 2025-01-25 07:13:01

详解C++循环创建多级目录及判断目录是否存在的方法_C 语言的相关文章

详解C++中的vector容器及用迭代器访问vector的方法_C 语言

vector vector是相同类型对象的集合.集合中的每个对象有个对应的索引.vector常被称为容器(container). 为了使用vector,需要: #include <vector> using std::vector; vector是一个类模版(class template).C++有函数模版和类模版.模版本身不是函数或类,必须通过指定 类型让编译器去实例化(instantiation)它.比如vector<int> ivec. vector是模版,不是类型.从vec

详解C语言中的rename()函数和remove()函数的使用方法_C 语言

C语言rename()函数:重命名文件或目录头文件: #include <stdio.h> 函数rename()用于重命名文件.改变文件路径或更改目录名称,其原型为    int rename(char * oldname, char * newname); [参数]oldname为旧文件名,newname为新文件名. [返回值]修改文件名成功则返回0,否则返回-1. 重命名文件: 如果newname指定的文件存在,则会被删除. 如果newname与oldname不在一个目录下,则相当于移动文

详解state状态模式及在C++设计模式编程中的使用实例_C 语言

每个人.事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State).最简单的一个生活中的例子就是:地铁入口处,如果你放入正确的地铁票,门就会打开让你通过.在出口处也是验票,如果正确你就可以 ok,否则就不让你通过(如果你动作野蛮,或许会有报警(Alarm),:)). 有限状态自动机(FSM)也是一个典型的状态不同,对输入有不同的响应(状态转移). 通常我们在实现这类系统会使用到很多的 Switch/Case 语句,Case 某种状态,发生什么动作,C

详解C++编程中的重载流插入运算符和流提取运算符_C 语言

C++的流插入运算符"<<"和流提取运算符">>"是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream.cin和cout分别是istream类和ostream类的对象.在类库提供的头文件中已经对"<<"和">>"进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据.因此,凡是用"cout&

详解C++编程中类的成员变量和成员函数的相关知识_C 语言

C++类的成员变量和成员函数 类是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型.类这种数据类型是一个包含成员变量和成员函数的一个集合. 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存空间.但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型,本身不占用内存空间,而变量的值则需要内存来存储. 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是:成员函数是一个类的成员,出现在类体中,它的作用范围由类来决定:而普通函数是独立的,作

详解C++中的函数调用和下标以及成员访问运算符的重载_C 语言

函数调用使用括号调用的函数调用运算符是二元运算符. 语法 primary-expression ( expression-list ) 备注 在此上下文中,primary-expression 为第一个操作数,并且 expression-list(可能为参数的空列表)为第二个操作数.函数调用运算符用于需要大量参数的操作.这之所以有效,是因为 expression-list 是列表而非单一操作数.函数调用运算符必须是非静态成员函数. 函数调用运算符在重载时不会修改函数的调用方式:相反,它会在运算符

详解C语言中的char数据类型及其与int类型的转换_C 语言

C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器. 可通过下面程序判断编译器的默认char类型: void char_type() { char c=0xFF; if(c==-1) printf

详解AngularJS中$http缓存以及处理多个$http请求的方法_AngularJS

$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据.在AngularJS的实际项目中,经常需要处理多个$http请求,每个$http请求返回一个promise,我们可以把多个promise放到$q.all()方法接受的一个数组实参中去. 1.处理多个$http请求 angular.module('app',[]) .controller('AppCtrl', function AppCtrl(myService){ var app = this; myService.

详解在C++中显式默认设置的函数和已删除的函数的方法_C 语言

在 C++11 中,默认函数和已删除函数使你可以显式控制是否自动生成特殊成员函数.已删除的函数还可为您提供简单语言,以防止所有类型的函数(特殊成员函数和普通成员函数以及非成员函数)的参数中出现有问题的类型提升,这会导致意外的函数调用. 显式默认设置的函数和已删除函数的好处 在 C++ 中,如果某个类型未声明它本身,则编译器将自动为该类型生成默认构造函数.复制构造函数.复制赋值运算符和析构函数.这些函数称为特殊成员函数,它们使 C++ 中的简单用户定义类型的行为如同 C 中的结构.也就是说,可以创