第6章 目录操作函数库:dir.h 在程序设计中,常常涉及到对文件目录(文件夹)的操作,如新建、修改、删除、查找、设置工作目录等。C语言中dir.h中的函数提供了对目录操作的功能。 6.1 chdir()——更改当前工作目录函数 chdir()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\01
当程序中涉及当前工作目录的操作时,可以用chdir()函数设置工作目录。这样,下面的文件操作就可以用相对路径,而不必使用绝对路径。在没有使用chdir()函数时,当前工作目录即C语言启动时的目录。chdir()函数只能修改当前盘工作目录,不能修改盘符。
语法
int chdir(const char *path);
chdir()函数的语法参数说明如下:
参数path为新工作目录。
chdir()函数的返回值:成功返回0,不成功则返回-1。
示例
本示例演示用chdir()函数设置当前工作目录(在我的电脑中,TC运行在d:\tc目录)。其具体代码如下:
运行结果如图6.1所示。
图6.1 更改当前工作目录 6.2 findfirst()——搜索当前磁盘目录函数 findfirst()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\02
findfirst()函数用于搜索当前磁盘目录中第一个匹配的文件,常与findnext共同使用。
语法
int findfirst(const char path, struct ffblk ffblk, int attrib);
findfirst()函数的语法参数说明如下:
参数path为文件模式。
参数ffblk为文件控制块。
参数attrib为文件属性。
findfirst()函数的返回值:成功返回0,不成功则返回-1。
示例
本示例演示用findfirst()函数查找当前目录下所有扩展名为.c的文件。其具体代码如下:
运行结果如图6.2所示。
图6.2 查找当前目录下所有扩展名为.c的文件 6.3 findnext()——搜索磁盘下一个匹配的文件函数 findnext()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\03
findnext()函数用于搜索磁盘目录中下一个匹配的文件,结合循环语句,可以遍历所有匹配文件,常与findfirst()函数共同使用。
语法
int findnext(struct ffblk *ffblk);
findnext()函数的语法参数说明如下:
参数ffblk为文件控制块。
findnext()函数的返回值:成功返回0,不成功则返回-1。
示例
示例参见6.2的findfirst()函数。 6.4 fnmerge()——构造完整路径函数 fnmerge()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\04
fnmerge()函数用于由盘符、路径、文件名和扩展名构造完整路径。
语法
void fnmerge(char path, const char drive, const char dir, const char name, const char *ext);
fnmerge()函数的语法参数说明如表6.1所示。
表6.1 参数说明
fnmerge()函数没有返回值。
示例
本示例演示用fnmerge()函数由盘符、路径、文件名和扩展名构造完整路径。其具体代码如下:
运行结果如图6.3所示。
图6.3 由盘符、路径、文件名和扩展名构造完整路径 6.5 fnsplit()——拆分路径函数 fnsplit()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\05
fnsplit()函数用于把由盘符、路径、文件名和扩展名构成的完整路径各部分分解。
语法
int fnsplit(const char path, char drive, char dir, char name, char *ext);
fnsplit()函数的语法参数说明如表6.2所示。
表6.2 参数说明
fnsplit()函数的返回值:是否包含各组成部分的一个整数。
示例
本示例演示用fnsplit()函数把由盘符、路径、文件名和扩展名构成的完整路径各部分分解。其具体代码如下:
运行结果如图6.4所示。
图6.4 拆分路径 6.6 getcurdir()——获取指定驱动器上的工件目录函数 getcurdir()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\06\06
getcurdir()函数用于获取指定驱动器上的工作目录。
语法
int getcurdir(int drive, char *directory);
getcurdir()函数的语法参数说明如下:
参数drive为驱动器,其中0=当前驱动器,1=A,2=B…….
参数directory 为保存结果的字符串。
getcurdir()函数的返回值:成功返回0,不成功则返回-1。
示例
本示例演示用getcurdir()函数获取当前驱动器上的工作目录。其具体代码如下:
运行结果如图6.5所示。
图6.5 获取当前驱动器上的工作目录 6.7 getcwd()——获取当前工作目录函数 getcwd()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\07
getcwd()函数用于获取当前工作目录,与getcurdir()函数相比,它得到的路径包含盘符。
语法
char getcwd(char *buf, int buflen);
getcwd()函数的语法参数说明如下:
参数buf为保存当前工作目录的指针。
参数buflen为buf的长度。
getcwd()函数的返回值:与参数buf相同,保存当前工作目录的字符串地址。
示例
本示例演示用getcwd()函数获取当前工作目录。其具体代码如下:
运行结果如图6.6所示。
图6.6 获取当前工作目录函数 6.8 getdisk()——获取当前磁盘驱动器号函数 getdisk()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\08
getdisk()函数用于获取当前磁盘驱动器号。
语法
int getdisk(void);
getdisk()函数没有参数。
getdisk()函数的返回值:磁盘驱动器号,其中0=A,1=B……
示例
本示例演示用getdisk()函数获取当前磁盘驱动器号的方法。其具体代码如下:
运行结果如图6.7所示。
图6.7 获取当前磁盘驱动器号 6.9 mkdir()——建立目录函数 mkdir()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\09
mkdir()函数用于建立目录。
语法
int mkdir(const char *path);
mkdir()函数的语法参数说明如下:
参数path为要建立的目录的完整路径。
mkdir()函数的返回值:成功返回0,不成功则返回-1。
示例
本示例演示用mkdir()函数建立目录。其具体代码如下:
运行结果如图6.8所示。
图6.8 建立目录 6.10 mktemp()——生成不重复文件名函数 mktemp()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\06\10
mktemp()函数用于生成不重复的文件名。
语法
char mktemp(char template);
mktemp()函数的语法参数说明如下:
template:文件名模式。其中后六位是X,系统会按8.3命名规则自动生成不重复的完整文件名。
mktemp()函数的返回值:生成的文件名。
示例
本示例演示用mktemp()函数自动生成不重复文件名的方法。其具体代码如下:
运行结果如图6.9所示。
图6.9 自动生成不重复文件名 6.11 rmdir()——删除文件目录函数 rmdir()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\06\11
rmdir()函数用于删除文件目录(注意,只能删除空目录)。
语法
int rmdir(const char *path);
rmdir()函数的语法参数说明如下:
参数path为要删除的目录。
rmdir()函数的返回值:成功返回0,不成功则返回-1。
示例
本示例演示用rmdir()函数删除目录。其具体代码如下:
运行结果如图6.10所示。
图6.10 删除目录 6.12 setdisk()——设置当前工作驱动器函数 setdisk()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\06\12
setdisk()函数用于设置当前工作驱动器。
语法
int setdisk(int drive);
setdisk()函数的语法参数说明如下:
drive:要设置的驱动器号,其中0=A,1=B……
setdisk()函数的返回值:可用驱动器的总数。
示例
本示例演示用setdisk()函数设置当前驱动器的方法。其具体代码如下:
运行结果如图6.11所示。
图6.11 设置当前工作驱动器 6.13 searchpath()——查找文件函数 searchpath()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\06\13
searchpath()函数的功能是查找一个文件在磁盘中的完整路径。
语法
char searchpath(const char file);
searchpath()函数的语法参数说明如下:
参数file为要查找的文件名。
searchpath()函数的返回值:成功返回完整路径,不成功则为NULL。
示例
本示例演示用searchpath()函数查找一个文件在磁盘中的完整路径。其具体代码如下:
运行结果如图6.12所示。
图6.12 用searchpath()函数查找一个文件的完整路径