2017-06-02 52 views
0

我试图写入文件,但是,文件指针始终指向NULL,就好像该文件不存在一样。该文件与发现并写入的输入文件位于同一目录中。任何想法为什么发生这种情况?打开要写入程序所在的目录中的文件,但无法找到文件

FILE *vmoutput = NULL; 
    fopen("vmoutput.txt", "w"); 

    // if file could not be opened return error 
    if(vmoutput == NULL) 
    { 
    printf("FILE COULD NOT BE FOUND\n"); 
    return 1; 
    } 
+0

如果您在服务器上测试此项,请确保您尝试写入的文件具有正确的文件权限设置。不正确的读取和写入权限值将表现为丢失的文档。 – Korgrue

+4

您需要将'fopen()'的结果赋值给'vmoutput'。 –

+0

谢谢,我没有听清楚。 @DavidBowling – starlight

回答

3

你怎么样解决您的代码:

  • 存储和检查fopen的返回值
  • 报告实际的错误

#include <stdio.h> 
#include <string.h> 
#include <errno.h> 

... 
FILE *vmoutput = fopen("vmoutput.txt", "w"); 
if (vmoutput == NULL) { 
    fprintf(stderr, "Can't open %s: %s\n", "vmoutput.txt", strerror(errno)); 
    return 1; 
} 

现在您的代码总是将vmoutput设置为NULL

+0

谢谢!我不知道我可以检查这样的实际错误。这绝对是我将来会用到的东西。 – starlight

2

成功完成fopen()返回 a FILE指针。否则,返回NULL并将errno设置为指示 该错误。

因此,您必须将从fopen()返回的值分配给您的变量,如下所示。你也应该缩进你的代码。

#include <stdio.h> 
int main(){ 
    FILE *vmoutput = NULL; 
    vmoutput =fopen("vmoutput.txt", "w"); 
    // if file could not be opened return error 
    if(vmoutput == NULL) 
    { 
     perror("Unable to open file\n"); 
     return 1; 
    } 
    return 0; 
} 
+0

@DavidBowling我付出的代价微不足道。从手册:* perror()函数产生一个关于标准错误的消息,描述在调用系统或库函数期间遇到的最后一个错误。[...]然后产生一个对应于当前errno值的错误消息, line。* – BetaRunner

+0

但是你需要'#include '来使用errno变量。我添加了标题并删除了错误分配。 – BetaRunner

+0

你不需要在'perror()'中使用'errno'。 [只需要'#include '](http://pubs.opengroup.org/onlinepubs/9699919799/functions/perror.html),除非您在代码中明确使用了'errno'。例如,如果您正在使用'strerror()',则需要它。 –

相关问题