领悟旧事

Learned Helplessness
分类新闻>>生活领悟>>
XE10 C++Builder建立多级目录
来源:http://www.xx0594.com/
时间:2023-8-7
作者:  浏览人数:434
在Xe10 android建立多级目录,只能一级一级地建立。代码如下:
 /**
  * 创建多级文件目录
  * @param fileDir
  * @return true/false
  */
bool myCreateDir(AnsiString sPath)
{
 AnsiString sDirFlag="\\";//Window平台下的目录分隔符
 bool b=true;
 #if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(__ANDROID__)
 sDirFlag="/";
 #endif
 TStringList *ls=splitStr(sPath,sDirFlag);
 AnsiString temp;
 for(int i=0;i<ls->Count;i++){
  if(ls->Strings[i]=="") continue;
  temp += sDirFlag+ls->Strings[i];
  if(!DirectoryExists(temp)){
   b=CreateDir(temp);
   if(!b) break;
  }
 }
 delete ls;
 return b;
}
其中用到一个自定义函数,如下
//---------------------------------------------------------------------------

 //把字符串S,按照sFlag进行分隔,返回一个数组
TStringList* splitStr(AnsiString S,AnsiString sFlag)
{
 TStringList *ls= new TStringList();
 //AnsiString* s="2023/12/2 12:12:12|ymdy"  ;
 int i;
 do{
  i=S.AnsiPos(sFlag);
  if(i>0){
   AnsiString s= S.SubString0(0,i-1);
   ls->Add(s);
   //下一行SubString(i,len)有个坑:在windows系统中,从1开始,在android中,从0开始。
   //用SubString0似乎可以解决,但SubString0不能复合运算如 S=S.SubString0(0,2)+"ss"会出错。
   //要写成 S=S.SubString0(0,2);S+="ss";
   //也不能将其当作变量,如ls->Add(S.SubString0(0,2))将出错,要写成
   //S=S.SubString0(0,2);ls->Add(S);
   //S = S.SubString(i,S.Length()-i);这是错的。
   //S = S.SubString0(i+sFlag.Length()-1,S.Length()-i-sFlag.Length()+1);
   S=StringReplace(S,s+sFlag,"",TReplaceFlags()<<rfIgnoreCase);
  }else{
   ls->Add(S);
  }
 }while(i>0);
 return ls;
}
//---------------------------------------------------------------------------
 

关闭窗口
 访问量:519284
任何第三方若要引用、转摘本站信息,均需征得本站书面同意,否则视为侵权。本站信息为个人观点,若因引用本站信息而产生的任何情况,均与本站无关。Email:linmutou@163.com
闽ICP备14017840号-2