如何从FILE指针得到文件名?(假设这个指针是从别的模块传过来的)

时间:2008-07-24 16:54:23   来源:论坛整理  作者:  编辑:chinaitzhe
如何从FILE指针得到文件名?(假设这个指针是从别的模块传过来的)
网友回复:传文件名,当前模块再打开文件,别传FILE指针
网友回复:struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

_tmpfname应该是这个吧
网友回复:嘿嘿,试试就知道了

引用 2 楼 hai040 的回复:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

_tmpfname应该是这个吧

网友回复:查查这个
GetModuleFileName
网友回复:二楼的说法是正道
网友回复:
引用 5 楼 anguofeng 的回复:
二楼的说法是正道

...
FILE结构里的3个指针都没用到(==NULL)
网友回复:
引用 1 楼 xkyx_cn 的回复:
传文件名,当前模块再打开文件,别传FILE指针


比如需要在多个模块之间传播一个文件,可以在一个统一的地方打开和关闭,之后一直传递FILE *,有点像设计模式中说的职责链模式.假如每个模块都分别打开文件在关闭文件,很难受啊.其中一个模块需要文件名.
网友回复:那就多传一个参数吧,我没找到从传来的FILE*指针里得出文件名的办法
引用 7 楼 Keyser 的回复:
引用 1 楼 xkyx_cn 的回复:
传文件名,当前模块再打开文件,别传FILE指针


比如需要在多个模块之间传播一个文件,可以在一个统一的地方打开和关闭,之后一直传递FILE *,有点像设计模式中说的职责链模式.假如每个模块都分别打开文件在关闭文件,很难受啊.其中一个模块需要文件名.

网友回复:
引用 8 楼 xkyx_cn 的回复:
那就多传一个参数吧,我没找到从传来的FILE*指针里得出文件名的办法
引用 7 楼 Keyser 的回复:
引用 1 楼 xkyx_cn 的回复:
传文件名,当前模块再打开文件,别传FILE指针


比如需要在多个模块之间传播一个文件,可以在一个统一的地方打开和关闭,之后一直传递FILE *,有点像设计模式中说的职责链模式.假如每个模块都分别打开文件在关闭文件,很难受啊.其中一个模块需要文件名.


我也没发现FILE*能得到文件名
CFile之类倒是有的
网友回复:
引用 2 楼 hai040 的回复:
struct _iobuf {
char *_ptr;
int? _cnt;
char *_base;
int? _flag;
int? _file;
int? _charbuf;
int? _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

_tmpfname应该是这个吧

网友回复:
引用 10 楼 cprime 的回复:
引用 2 楼 hai040 的回复:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

_tmpfname应该是这个吧


不是这个,这个是调了tmpfile才会有.
网友回复:
引用 8 楼 xkyx_cn 的回复:
那就多传一个参数吧,我没找到从传来的FILE*指针里得出文件名的办法
引用 7 楼 Keyser 的回复:
引用 1 楼 xkyx_cn 的回复:
传文件名,当前模块再打开文件,别传FILE指针


比如需要在多个模块之间传播一个文件,可以在一个统一的地方打开和关闭,之后一直传递FILE *,有点像设计模式中说的职责链模式.假如每个模块都分别打开文件在关闭文件,很难受啊.其中一个模块需要文件名.



同意,或者假如很通用,就再封装一个类似CFile的对象来传递
网友回复:
引用 7 楼 Keyser 的回复:
引用 1 楼 xkyx_cn 的回复:
传文件名,当前模块再打开文件,别传FILE指针


比如需要在多个模块之间传播一个文件,可以在一个统一的地方打开和关闭,之后一直传递FILE *,有点像设计模式中说的职责链模式.假如每个模块都分别打开文件在关闭文件,很难受啊.其中一个模块需要文件名.


这样的话,我想是否可以在打开和关闭文件的“统一的地方”再定义一个获取文件名的函数已供其他模块调用。
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



char* getFileName()

{

  return &fileName;

}


在open的时候,调用一个
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



void setFileName(char* tmpFileName)

{

  *fileName = tmpFileName;

}




这样耦合性还不错的。
关键字:FILE,指针,得到,文件名,假设,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面