C语言 如何通过文件指针获得文件名?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 如何通过文件指针获得文件名?相关的知识,希望对你有一定的参考价值。
文件指针来获得文件路径的方法
在tc20中,一旦你成功打开一个文件,他将返回一个文件指针。
FILE *fp;
fp=fopen("abc.dat",文件状态(如w,r,r+));
当上面的操作成功后文件指针fp就会赋予你打开文件的最基本信息!
FILE结构在Turbo C在stdio.h文件中有以下的文件类型声明:
typedef struct
short level; /*缓冲区“满”或“空”的程度*/
unsigned flags; /*文件状态标志*/
char fd; /*文件描述符(句柄)*/
unsigned char hold; /*如无缓冲区不读取字符*/
short bsize; /*缓冲区的大小*/
unsigned char *buffer; /*数据缓冲区的位置*/
unsigned ar *curp; /*指针,当前的指向*/
unsigned istemp; /*临时文件,指示器*/
short token; /*用于有效性检查*/
FILE;
为管理你打开的文件,操作系统为所有的文件创建一个打开文件信息的结构数组---文件控制块(FCB),而文件描述符就承担了访问与之对应的文件控制块的使命,他在c中就充当文件句柄。每一个文件都需要唯一的一个标识,这样才能管理若干个文件
FCB他存贮这你所有打开文件的信息,而只有通过文件句柄才能访问与之对应的FCB,从而访问你的文件.
文件句柄,就是FCB结构数组的下标
所以,通过文件指针获得文件名的操作路线:
FILE *fp;
char fd = fp->fd;
FCB *fcb;
char *filiname = fcb[fd].filiname
利用FCB(文件控制块)操作的例子见:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=8747&kindLevel=1&kindId=24655&postId=40710&readSg=1
参考技术A 比较难,但并非没可能。视窗系统,见:
http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx
要做额外工作,用 _get_osfhandle() 获取视窗文件句柄。
linux 系统,有人给出通过文件指针得到文件名例子:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(void)
char path[1024];
char result[1024];
/* Open a file, get the file descriptor. */
FILE*f = fopen("/etc/passwd","r");
int fd = fileno(f);
/* Read out the link to our file descriptor. */
sprintf(path,"/proc/self/fd/%d", fd);
memset(result,0,sizeof(result));
readlink(path, result,sizeof(result)-1);
/* Print the result. */
printf("%s\n", result);
参考技术B C语言中,文件FILE的概念:此前,我们所熟悉的输入与输出都只是涉及到键盘及显示器,但是完全不够;这时,解决的办法是:将这些需要记录的数据,记录到某些介质上,利用介质的存储特性,携带或永久保存数据,这些记录在外部介质上的数据的集合称为“文件”;
按照数据在介质上的存放方式,分为文本文件和二进制文件;
打开及关闭文件举例:
fopen(文件名,文件使用方式)
fclose(文件指针) 参考技术C fopen(文件名,文件使用方式) fclose(文件指针) 就是打开系统中的C语言文件的打开是通过stdio.h函数库的fopen()函数实现的。它的调用方式一般 参考技术D _findnext(handle,&FileInfo);handle就是指针值,FileInfo是一个结构体,具体是:struct _finddata_t FileInfo.
以上是关于C语言 如何通过文件指针获得文件名?的主要内容,如果未能解决你的问题,请参考以下文章
C 语言文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )