第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目录)。其具体代码如下:

    img147

    运行结果如图6.1所示。

    img148

    图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的文件。其具体代码如下:

    img149

    运行结果如图6.2所示。

    img150

    图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 参数说明

    img151

    fnmerge()函数没有返回值。

    示例

    本示例演示用fnmerge()函数由盘符、路径、文件名和扩展名构造完整路径。其具体代码如下:

    img152

    运行结果如图6.3所示。

    img153

    图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 参数说明

    img154

    fnsplit()函数的返回值:是否包含各组成部分的一个整数。

    示例

    本示例演示用fnsplit()函数把由盘符、路径、文件名和扩展名构成的完整路径各部分分解。其具体代码如下:

    img155

    运行结果如图6.4所示。

    img156

    图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()函数获取当前驱动器上的工作目录。其具体代码如下:

    img157

    运行结果如图6.5所示。

    img158

    图6.5 获取当前驱动器上的工作目录 6.7 getcwd()——获取当前工作目录函数 getcwd()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\06\07

    getcwd()函数用于获取当前工作目录,与getcurdir()函数相比,它得到的路径包含盘符。

    语法

    char getcwd(char *buf, int buflen);

    getcwd()函数的语法参数说明如下:

    参数buf为保存当前工作目录的指针。

    参数buflen为buf的长度。

    getcwd()函数的返回值:与参数buf相同,保存当前工作目录的字符串地址。

    示例

    本示例演示用getcwd()函数获取当前工作目录。其具体代码如下:

    img159

    运行结果如图6.6所示。

    img160

    图6.6 获取当前工作目录函数 6.8 getdisk()——获取当前磁盘驱动器号函数 getdisk()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\06\08

    getdisk()函数用于获取当前磁盘驱动器号。

    语法

    int getdisk(void);

    getdisk()函数没有参数。

    getdisk()函数的返回值:磁盘驱动器号,其中0=A,1=B……

    示例

    本示例演示用getdisk()函数获取当前磁盘驱动器号的方法。其具体代码如下:

    img161

    运行结果如图6.7所示。

    img162

    图6.7 获取当前磁盘驱动器号 6.9 mkdir()——建立目录函数 mkdir()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\06\09

    mkdir()函数用于建立目录。

    语法

    int mkdir(const char *path);

    mkdir()函数的语法参数说明如下:

    参数path为要建立的目录的完整路径。

    mkdir()函数的返回值:成功返回0,不成功则返回-1。

    示例

    本示例演示用mkdir()函数建立目录。其具体代码如下:

    img163

    运行结果如图6.8所示。

    img164

    图6.8 建立目录 6.10 mktemp()——生成不重复文件名函数 mktemp()函数

    实用程度:★★☆☆☆

    实例位置:配套资源\SL\06\10

    mktemp()函数用于生成不重复的文件名。

    语法

    char mktemp(char template);

    mktemp()函数的语法参数说明如下:

    template:文件名模式。其中后六位是X,系统会按8.3命名规则自动生成不重复的完整文件名。

    mktemp()函数的返回值:生成的文件名。

    示例

    本示例演示用mktemp()函数自动生成不重复文件名的方法。其具体代码如下:

    img165

    运行结果如图6.9所示。

    img166

    图6.9 自动生成不重复文件名 6.11 rmdir()——删除文件目录函数 rmdir()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\06\11

    rmdir()函数用于删除文件目录(注意,只能删除空目录)。

    语法

    int rmdir(const char *path);

    rmdir()函数的语法参数说明如下:

    参数path为要删除的目录。

    rmdir()函数的返回值:成功返回0,不成功则返回-1。

    示例

    本示例演示用rmdir()函数删除目录。其具体代码如下:

    img167

    运行结果如图6.10所示。

    img168

    图6.10 删除目录 6.12 setdisk()——设置当前工作驱动器函数 setdisk()函数

    实用程度:★★☆☆☆

    实例位置:配套资源\SL\06\12

    setdisk()函数用于设置当前工作驱动器。

    语法

    int setdisk(int drive);

    setdisk()函数的语法参数说明如下:

    drive:要设置的驱动器号,其中0=A,1=B……

    setdisk()函数的返回值:可用驱动器的总数。

    示例

    本示例演示用setdisk()函数设置当前驱动器的方法。其具体代码如下:

    img169

    运行结果如图6.11所示。

    img170

    图6.11 设置当前工作驱动器 6.13 searchpath()——查找文件函数 searchpath()函数

    实用程度:★★☆☆☆

    实例位置:配套资源\SL\06\13

    searchpath()函数的功能是查找一个文件在磁盘中的完整路径。

    语法

    char searchpath(const char file);

    searchpath()函数的语法参数说明如下:

    参数file为要查找的文件名。

    searchpath()函数的返回值:成功返回完整路径,不成功则为NULL。

    示例

    本示例演示用searchpath()函数查找一个文件在磁盘中的完整路径。其具体代码如下:

    img171

    运行结果如图6.12所示。

    img172

    图6.12 用searchpath()函数查找一个文件的完整路径