C语言打开文件的路径问题

C语言打开文件的路径问题,第1张

文件路径分为绝对路径和相对路径。

绝对路径:是从盘符开始的路径,形如

D:\Project\Data\input.txt

相对路径:是从当前路径开始的路径,假如当前路径为D:\Project

要描述上述路径,只需输入

Data\input.txt

实际上,严格的相对路径写法应为

.\Data\input.txt

其中,.表示当前路径,在通常情况下可以省略,只有在特殊的情况下不能省略。

与.类似..为父目录,也即上一层目录。

另外,还有一种不包含盘符的特殊绝对路径,形如

\windows\system32\cmd.exe

无论当前路径是什么,会自动地从当前盘的根目录开始查找指定的程序。

如果是通过open方式打开的,那么第一个参数就是文件路径信息:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *path, int oflag, /* mode_t mode */...)

如果是通过fopen方式打开的,那么第一个参数就是文件路径信息:

#include <stdio.h>

FILE *fopen(const char *filename, const char *mode)

无论通过open还是fopen打开文件,都必须先知道文件路径信息,尽管可能是相对路径。

如果知道了filename的内容,我们就可以定位它的绝对路径,也就是你说的完全路径。

1. filename本身就是绝对路径,ok。

2. filename是相对路径,那么先通过getcwd获取进程的执行路径,然后再获取绝对路径即可。

#include <unistd.h>

extern char *getcwd(char *buf, size_t size)

但是,如果进程在打开文件后又执行了chdir、fchdir之类函数的话,估计就不能够再获取文件路径信息了。

#include <unistd.h>

int chdir(const char *path)

int fchdir(int fildes)

//获取指定目录下的所有文件列表 author:wangchangshaui jlu

char** getFileNameArray(const char *path, int* fileCount)

{

int count = 0

char **fileNameList = NULL

struct dirent* ent = NULL

DIR *pDir

char dir[512]

struct stat statbuf

//打开目录

if ((pDir = opendir(path)) == NULL)

{

myLog("Cannot open directory:%s\n", path)

return NULL

}

//读取目录

while ((ent = readdir(pDir)) != NULL)

{ //统计当前文件夹下有多少文件(不包括文件夹)

//得到读取文件的绝对路径名

snprintf(dir, 512, "%s/%s", path, ent->d_name)

//得到文件信息

lstat(dir, &statbuf)

//判断是目录还是文件

if (!S_ISDIR(statbuf.st_mode))

{

count++

}

} //while

//关闭目录

closedir(pDir)

// myLog("共%d个文件\n", count)

//开辟字符指针数组,用于下一步的开辟容纳文件名字符串的空间

if ((fileNameList = (char**) myMalloc(sizeof(char*) * count)) == NULL)

{

myLog("Malloc heap failed!\n")

return NULL

}

//打开目录

if ((pDir = opendir(path)) == NULL)

{

myLog("Cannot open directory:%s\n", path)

return NULL

}

//读取目录

int i

for (i = 0(ent = readdir(pDir)) != NULL &&i <count)

{

if (strlen(ent->d_name) <= 0)

{

continue

}

//得到读取文件的绝对路径名

snprintf(dir, 512, "%s/%s", path, ent->d_name)

//得到文件信息

lstat(dir, &statbuf)

//判断是目录还是文件

if (!S_ISDIR(statbuf.st_mode))

{

if ((fileNameList[i] = (char*) myMalloc(strlen(ent->d_name) + 1))

== NULL)

{

myLog("Malloc heap failed!\n")

return NULL

}

memset(fileNameList[i], 0, strlen(ent->d_name) + 1)

strcpy(fileNameList[i], ent->d_name)

myLog("第%d个文件:%s\n", i, ent->d_name)

i++

}

} //for

//关闭目录

closedir(pDir)

*fileCount = count

return fileNameList


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

原文地址: http://outofmemory.cn/tougao/11753019.html

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

发表评论

登录后才能评论

评论列表(0条)

保存