C语言函数的目录函数

C语言函数的目录函数,第1张

所在函数库为dirh、dosh

int chdir(char path) 使指定的目录path(如:C:\\WPS)变成当前的工作目录,成

功返回0

int findfirst(char pathname,struct ffblk ffblk,int attrib)查找指定的文件,成功

返回0

pathname为指定的目录名和文件名,如C:\\WPS\\TXT

ffblk为指定的保存文件信息的一个结构,定义如下: struct ffblk                        {                                    char ff_reserved[21]; /DOS保留字/ char ff_attrib;       /文件属性/  int  ff_ftime;        /文件时间/  int  ff_fdate;        /文件日期/  long ff_fsize;        /文件长度/  char ff_name[13];     /文件名/   }      attrib为文件属性,由以下字符代表

┃FA_RDONLY 只读文件┃FA_LABEL 卷标号┃

┃FA_HIDDEN 隐藏文件┃FA_DIREC 目录 ┃

┃FA_SYSTEM 系统文件┃FA_ARCH 档案 ┃

例:

struct ffblk ff;

findfirst(wps,&ff,FA_RDONLY);

int findnext(struct ffblk ffblk) 取匹配finddirst的文件,成功返回0

void fumerge(char path,char drive,char dir,char name,char ext)

此函数通过盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),扩展名ext(EXE、COM等)组成一个文件名

存与path中

int fnsplit(char path,char drive,char dir,char name,char ext)

此函数将文件名path分解成盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),扩展名ext(EXE、COM等),并分别存入相应的变量中

int getcurdir(int drive,char direc) 此函数返回指定驱动器的当前工作目录名称

drive 指定的驱动器(0=当前,1=A,2=B,3=C等)

direc 保存指定驱动器当前工作路径的变量 成功返回0

char getcwd(char buf,iint n) 此函数取当前工作目录并存入buf中,直到n个字

节长为为止错误返回NULL

int getdisk() 取当前正在使用的驱动器,返回一个整数(0=A,1=B,2=C等)

int setdisk(int drive) 设置要使用的驱动器drive(0=A,1=B,2=C等),

返回可使用驱动器总数

int mkdir(char pathname) 建立一个新的目录pathname,成功返回0

int rmdir(char pathname) 删除一个目录pathname,成功返回0

char mktemp(char template) 构造一个当前目录上没有的文件名并存于template中

char searchpath(char pathname) 利用MSDOS找出文件filename所在路径,

,此函数使用DOS的PATH变量,未找到文件返回NULL

C语言里

在main函数的第二个参数里面,

保存着当前程序运行的目录

也就是argv[0]

main( int argc, char argv[])

{

printf("%s ", argv[0] );

}

就是文件当前所在位置

不过需要注意的一点是

这个路径里面保存了当前文件的文件名

如果你只是需要路径的话还需要自己 *** 作一下

main(int a,char c[])

{

char s[100];

int i;

//把路径保存到字符串s里

strcpy(s,c[0]);

for(i=strlen(s); i>0 ; i--)

if( s[i] == '\\')

{

s[i]='\0';

break;

}

//找到最后一个 \ 并删除之后的内容

//最后输出的s,就是当前文件的路径了

puts(s);

}

system("attrib -s -h"); // 如果需要显示系统文件和隐藏文件

system("DIR /b >> file_listtxt"); // 文件名存入 文件 file_listtxt

/b -- 只取 文件名

这个文件夹 不一定会生成到最终发布目录,这个要看里面的文件是什么性质,是不是内容文件并复制到输出目录。

1 SystemDiagnosticsProcessGetCurrentProcess()MainModuleFileName

获取模块的完整路径。

2 SystemEnvironmentCurrentDirectory

获取和设置当前目录(该进程从中启动的目录)的完全限定目录。

3 SystemIODirectoryGetCurrentDirectory()

获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:\>

     

  /   

        这是CBrowseDir的类定义文件   BrowseDirh     

     

  /   

  #include   "stdlibh"   

     

  class   CBrowseDir   

  {   

  protected:   

  //存放初始目录的绝对路径,以'\'结尾   

  char   m_szInitDir[_MAX_PATH];   

     

  public:   

  //缺省构造器   

  CBrowseDir();   

     

  //设置初始目录为dir,如果返回false,表示目录不可用   

  bool   SetInitDir(const   char   dir);   

     

  //开始遍历初始目录及其子目录下由filespec指定类型的文件   

  //filespec可以使用通配符      ,不能包含路径。   

  //如果返回false,表示遍历过程被用户中止   

  bool   BeginBrowse(const   char   filespec);   

     

  protected:   

  //遍历目录dir下由filespec指定的文件   

  //对于子目录,采用迭代的方法   

  //如果返回false,表示中止遍历文件   

  bool   BrowseDir(const   char   dir,const   char   filespec);   

     

  //函数BrowseDir每找到一个文件,就调用ProcessFile   

  //并把文件名作为参数传递过去   

  //如果返回false,表示中止遍历文件   

  //用户可以覆写该函数,加入自己的处理代码   

  virtual   bool   ProcessFile(const   char   filename);   

     

  //函数BrowseDir每进入一个目录,就调用ProcessDir   

  //并把正在处理的目录名及上一级目录名作为参数传递过去   

  //如果正在处理的是初始目录,则parentdir=NULL   

  //用户可以覆写该函数,加入自己的处理代码   

  //比如用户可以在这里统计子目录的个数   

  virtual   void   ProcessDir(const   char     

  currentdir,const   char   parentdir);   

  };   

     

     

  //   

     

  这是CBrowseDir的类实现文件   BrowseDircpp   

     

  //   

  #include   "stdlibh"   

  #include   "directh"   

  #include   "stringh"   

  #include   "ioh"   

     

  #include   "browsedirh"   

     

  CBrowseDir::CBrowseDir()   

  {   

  //用当前目录初始化m_szInitDir   

  getcwd(m_szInitDir,_MAX_PATH);   

     

  //如果目录的最后一个字母不是'\',则在最后加上一个'\'   

  int   len=strlen(m_szInitDir);   

  if   (m_szInitDir[len-1]   !=   '\\')   

  strcat(m_szInitDir,"\\");   

  }   

     

  bool   CBrowseDir::SetInitDir(const   char   dir)   

  {   

  //先把dir转换为绝对路径   

  if   (_fullpath(m_szInitDir,dir,_MAX_PATH)   ==   NULL)   

  return   false;   

     

  //判断目录是否存在   

  if   (_chdir(m_szInitDir)   !=   0)   

  return   false;   

     

  //如果目录的最后一个字母不是'\',则在最后加上一个'\'   

  int   len=strlen(m_szInitDir);   

  if   (m_szInitDir[len-1]   !=   '\\')   

  strcat(m_szInitDir,"\\");   

     

  return   true;   

  }   

     

  bool   CBrowseDir::BeginBrowse(const   char   filespec)   

  {   

  ProcessDir(m_szInitDir,NULL);   

  return   BrowseDir(m_szInitDir,filespec);   

  }   

     

  bool   CBrowseDir::BrowseDir   

  (const   char   dir,const   char   filespec)   

  {   

  _chdir(dir);   

     

  //首先查找dir中符合要求的文件   

  long   hFile;   

  _finddata_t   fileinfo;   

  if   ((hFile=_findfirst(filespec,&fileinfo))   !=   -1)   

  {   

  do   

  {   

  //检查是不是目录   

  //如果不是,则进行处理   

  if   (!(fileinfoattrib   &   _A_SUBDIR))   

  {   

  char   filename[_MAX_PATH];   

  strcpy(filename,dir);   

  strcat(filename,fileinfoname);   

  if   (!ProcessFile(filename))   

  return   false;   

  }   

  }   while   (_findnext(hFile,&fileinfo)   ==   0);   

  _findclose(hFile);   

  }   

     

  //查找dir中的子目录   

  //因为在处理dir中的文件时,派生类的ProcessFile有可能改变了   

  //当前目录,因此还要重新设置当前目录为dir。   

  //执行过_findfirst后,可能系统记录下了相关信息,因此改变目录   

  //对_findnext没有影响。   

  _chdir(dir);   

  if   ((hFile=_findfirst("",&fileinfo))   !=   -1)   

  {   

  do   

  {   

  //检查是不是目录   

  //如果是,再检查是不是      或        

  //如果不是,进行迭代   

  if   ((fileinfoattrib   &   _A_SUBDIR))   

  {   

  if   (strcmp(fileinfoname,"")   !=   0   &&   strcmp   

  (fileinfoname,"")   !=   0)   

  {   

  char   subdir[_MAX_PATH];   

  strcpy(subdir,dir);   

  strcat(subdir,fileinfoname);   

  strcat(subdir,"\\");   

  ProcessDir(subdir,dir);   

  if   (!BrowseDir(subdir,filespec))   

  return   false;   

  }   

  }   

      }   while   (_findnext(hFile,&fileinfo)   ==   0);   

  _findclose(hFile);   

  }   

  return   true;   

  }   

     

  bool   CBrowseDir::ProcessFile(const   char   filename)   

  {   

  return   true;   

  }   

     

  void   CBrowseDir::ProcessDir(const   char     

  currentdir,const   char   parentdir)   

  {   

  }   

     

     

  /   

  这是例子examplecpp     

         

  /   

  #include   "stdioh"   

     

  #include   "BrowseDirh"   

     

  //从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数   

  class   CStatDir:public   CBrowseDir   

  {   

  protected:   

  int   m_nFileCount;       //保存文件个数   

  int   m_nSubdirCount;   //保存子目录个数   

     

  public:   

  //缺省构造器   

  CStatDir()   

  {   

  //初始化数据成员m_nFileCount和m_nSubdirCount   

  m_nFileCount=m_nSubdirCount=0;   

  }   

     

  //返回文件个数   

  int   GetFileCount()   

  {   

  return   m_nFileCount;   

  }   

     

  //返回子目录个数   

  int   GetSubdirCount()   

  {   

  //因为进入初始目录时,也会调用函数ProcessDir,   

  //所以减1后才是真正的子目录个数。   

  return   m_nSubdirCount-1;   

  }   

     

  protected:   

  //覆写虚函数ProcessFile,每调用一次,文件个数加1   

  virtual   bool   ProcessFile(const   char   filename)   

  {   

  m_nFileCount++;   

  return   CBrowseDir::ProcessFile(filename);   

  }   

     

  //覆写虚函数ProcessDir,每调用一次,子目录个数加1   

  virtual   void   ProcessDir   

  (const   char   currentdir,const   char   parentdir)   

  {   

  m_nSubdirCount++;   

  CBrowseDir::ProcessDir(currentdir,parentdir);   

  }   

  };   

     

  void   main()   

  {   

  //获取目录名   

  char   buf[256];   

  printf("请输入要统计的目录名:");   

  gets(buf);   

     

  //构造类对象   

  CStatDir   statdir;   

     

  //设置要遍历的目录   

  if   (!statdirSetInitDir(buf))   

  {   

  puts("目录不存在。");   

  return;   

  }   

     

  //开始遍历   

  statdirBeginBrowse("");   

     

  //统计结果中,子目录个数不含      及      

  printf("文件总数:   %d\n子目录总数:     

  %d\n",statdirGetFileCount(),   

  statdirGetSubdirCount());   

  }

//三个函数:

#include <sys/stath>

#include <ioh>

//求目录 ,返回大小

int FindDirs(LPCTSTR szDir,CStringArray & aDirArray)

{

CFileFind tempFind; //声明一个CFileFind类变量,以用来搜索

char tempFileFind[MAX_PATH]; //用于定义搜索格式

sprintf(tempFileFind,"%s\\",szDir);//匹配格式为,即该目录下的所有文件

BOOL IsFinded=tempFindFindFile(tempFileFind);//查找第一个文件

while(IsFinded)

{

IsFinded=(BOOL)tempFindFindNextFile();//递归搜索其他的文件

if(!tempFindIsDots() && tempFindIsDirectory())//如果不是""目录

{

char foundFileName[MAX_PATH];

sprintf(foundFileName,"%s\\%s",szDir,tempFindGetFileName());

FindDirs(foundFileName,aDirArray);

}

}

aDirArrayAdd(szDir);

tempFindClose();

return aDirArrayGetSize();

}

//返回一个目录下特定的文件

int FindFiles(LPCTSTR szDir,LPCSTR szFileName,CStringArray & aFileArray)

{

CFileFind tempFind; //声明一个CFileFind类变量,以用来搜索

char tempFileFind[MAX_PATH]; //用于定义搜索格式

sprintf(tempFileFind,"%s\\%s",szDir,szFileName);//匹配格式为,即该目录下的所有文件

BOOL IsFinded=tempFindFindFile(tempFileFind);//查找第一个文件

while(IsFinded)

{

IsFinded=(BOOL)tempFindFindNextFile();//递归搜索其他的文件

if((tempFindIsDots()== FALSE) && (tempFindIsDirectory()==FALSE))//如果不是""目录

{

char foundFileName[MAX_PATH];

sprintf(foundFileName,"%s\\%s",szDir,tempFindGetFileName());

aFileArrayAdd(foundFileName);

}

}

tempFindClose();

return TRUE;

}

//求一个目录下的指定文件

int GetAllFiles(LPCSTR szDir,LPCSTR szFileName,CStringArray & aFiles)

{

CStringArray aTmpDirs;

CStringArray aTmpFiles;

aFilesRemoveAll();

//求目录 ,返回大小

int iDirCount=FindDirs(szDir,aTmpDirs);

for (int i =0 ;i<iDirCount; i++)

{

//返回一个目下特定的文件

aTmpFilesRemoveAll();

FindFiles(aTmpDirs[i],szFileName,aTmpFiles);

aFilesAppend(aTmpFiles);

}

return aFilesGetSize();

}

//这样调用:

CString strDir;//要遍历的目录,请自己赋值

CStringArray aFiles;//CStringArray为支持CString对象数组,保存文件名用

//遍历指定目录下的指定文件(代表所有文件,同理可以用exe查找所有的exe文件)

GetAllFiles(strDir,"",aFiles);

CString strFilename;//

for (int i=0;i<aFilesGetSize();i++)//

{

strFilename = aFiles[i];

//将文件名逐个赋值给strFilename,然后可以进行显示、保存等其他 *** 作

}

以上就是关于C语言函数的目录函数全部的内容,包括:C语言函数的目录函数、c语言如何获得文件当前路径、获取当前目录下所有文件名函数 c语言等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9535390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存