2010-12-03 87 views
1

我一直在想这个。我读过许多书显示:当您打开一个文件,并且您发现该文件不存在,你应该有当时没有这样的文件退出系统把一个错误...C打开文件时编程fopen()

FILE *stream = NULL; 
stream = fopen("student.txt", "rt"); 
if (stream==NULL) { 
    printf(“Cannot open input file\n”); 
    exit(1); 
else {printf("\nReading the student list directory. Wait a moment please..."); 

但我认为而不是这样做..为什么不自动创建一个新的,当你发现你打开的文件不存在。即使您不会在使用该程序时在文件上写入文件(但会在下次使用该文件时)。我不确定这是否有效。我只是新来的,没有任何编程经验,所以我问你的意见是什么是创建文件试图打开它的优点和缺点,而不是退出系统通常在书籍上的示例。

FILE *stream = NULL; 
stream = fopen("student.txt", "rt"); 
    if (stream == NULL) stream = fopen("student.txt", "wt"); 
    else { 
      printf("\nReading the student list directory. Wait a moment please..."); 

您的意见将不胜感激。谢谢。

+1

他们实际上想要学习的是错误处理。如果开始时你会编写只在“高兴”情况下才能正常工作的程序,随着时间的推移,你将不得不学会在出现错误时做出正确的决定。请检查此问题:http://stackoverflow.com/q/4302748/395626 – ruslik 2010-12-03 02:04:41

回答

8

因为从您的示例,它似乎是一个输入文件,如果它不存在,没有创建它的点。

例如,如果程序应该打开一个文件,然后计算其中有多少元音,那么如果文件不存在,我就没有多少意思了。

我的价值0.02美元。

2

如果你的程序期望一个文件存在而它不存在,那么自己创建一个文件就没什么意义了,因为它将是空的。

如果OTOH,你的程序没问题,并且知道如何从头开始填充一个文件,那么这样做很好。

只要它对你的程序有意义,任何一种都可以。这里不要担心效率 - 这是微不足道的。首先担心正确性。

5

参数模式:

``r'' Open text file for reading. 
``r+'' Open for reading and writing. 
``w'' Truncate file to zero length or create text file for writing. 
``w+'' Open for reading and writing. The file is created if it does not 
     exist, otherwise it is truncated. 
``a'' Open for writing. The file is created if it does not exist. 
``a+'' Open for reading and writing. The file is created if it does not 
     exist. 

你的问题是一个简单的例子。阅读上面的描述,当你调用fopen()时,你应该决定使用哪种模式。请考虑为什么没有为“r”和“r +”创建文件,以及为什么文件被截断为“w”和“w +”等。所有这些都是合理的设计。

1

您可能没有权限创建/写入用户选择的目录中的文件。您将必须处理该错误状况。