绝对路径:是从盘符开始的路径,形如
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 jluchar** 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)