创建全局FILE *对象?
我正在构建一个程序,它有几个需要从文件中读取数据的函数。由于函数的使用相当频繁,因此打开和关闭每个调用的文件都非常耗时,所以我的计划是使FILE *对象成为全局文件,并使文件打开整个程序的持续时间。很显然,虽然,它是不可能的,因为这样的:创建全局FILE *对象?
#include <fstream>
FILE * yhtit;
yhtit = fopen("thefile.txt","r");
int main() {
return 0; }
给出错误:main.cpp|54|error: expected constructor, destructor, or type conversion before ‘=’ token|
什么是最好的方式来保持一个文件打开程序的整个过程中,无需单独传递文件*反对需要它的每个功能?
你几乎说得对。试试这个:
#include <fstream>
FILE * yhtit;
int main() {
yhtit = fopen("thefile.txt","r");
//Do your thing here.
fclose(yhtit);
return 0;
}
-1。 – Dacav 2010-07-25 06:46:55
为了公平起见,一个全局变量的解决办法是什么的问题是问了。 – wrosecrans 2010-07-25 09:13:53
反驳downvote – syb0rg 2016-06-24 18:37:48
#include <fstream>
FILE * yhtit = fopen("thefile.txt","r");
int main() {
return 0; }
-1全局变量的解决方案。 – Dacav 2010-07-25 06:47:30
@Dacav:全局变量是问题的一部分,SCFrench没有在他的解决方案中引入它,他只是修复了它的初始化。 – 2010-07-25 09:30:12
这将会是更好地FILE
指针传递给函数,而不是创建一个全局变量。全局变量通常是代码异味—可疑编码的迹象。您可以将文件传递给您的函数,而无需多次打开和关闭该文件。例如:
#include <stdio.h>
void readData(FILE *);
void readMoreData(FILE *);
int main() {
FILE *fp = fopen("...", "r");
readData(fp);
readMoreData(fp);
fclose(fp);
return 0;
}
可以保持在一个结构File *
变量,使该结构从任何函数访问。
typedef struct
{
FILE *fp;
//other members can also be part of this structure.
}myData;
appInit(myData *ptr)
{
ptr->fp = fopen(<>,<>);
//Initialise other variables also
return;
}
appDeInit(myData *ptr)
{
fclose(ptr->fp);
}
main()
{
myData *ptr= malloc(sizeof(myData));
appInit(ptr);
//Play with ptr in all your function calls
foo(ptr);
appDeInit(myData);
}
即使您正在使用FILE *这实际上只是一个C问题而不是C++问题。 – 2010-07-25 05:16:51
你应该将你的FILE *指针包装在一个Singleton Logging类中,并使其延迟初始化。有效地归结于具有全局(单)的对象,但它更整洁,如果你使用'Singleton'(相对于使用'全球FILE *' – bits 2010-07-25 06:52:49
@bits:如何做一个单身日志类帮助的功能,其中“几个函数...需要从一个文件中读取数据“为什么单身人士比全局人更”整洁“?试图制作一个类似FILE *的对象单身人士似乎是单身人士的滥用,因为它是一个有效的事情到了全局变量的解决方案做希望有一个程序打开多个文件。 – 2010-07-25 09:39:58