【问题标题】:C. Can't open a text file with fopen on Windows VistaC. 在 Windows Vista 上无法使用 fopen 打开文本文件
【发布时间】:2016-12-10 10:25:18
【问题描述】:

我想学习如何在 C 中使用 getc 函数,所以我编写了一个小程序,它应该将文本文件的第一个字母作为输出。 下面是它的外观:

int main()
{
    int character;
    FILE *file;
    file = fopen("file.txt", "r");
    if(file == NULL)
        printf("can't open\n");
    character = getc(file);
    printf("%c", character);
    fclose(file);
    return 0;
}

它无法打开file.txt 文件,我不知道为什么。 file.txt 与我的程序的 .exe 文件位于同一文件夹中。我正在使用 Windows Vista。 提前致谢

【问题讨论】:

  • 如果您在像 Visual Studio 这样的 IDE 中进行编程,程序运行时的当前工作目录通常不是可执行文件的目录,而是项目根目录。跨度>
  • 把文件的完整路径放到fopen
  • 我在代码块中编程
  • 同样,大多数 IDE 通常使用项目根目录作为程序的当前工作目录。要么移动文件,要么使用完整的绝对路径。
  • 如果您使用int main(int argc, char *argv[]),您可以从argv[0]处的可执行文件名称中找出路径。

标签: c fopen windows-vista


【解决方案1】:

这会从argv[0]中提取程序的位置

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

#define MYFILE "plik.txt"

int main(int argc, char *argv[]) {
    char fname[_MAX_PATH+1];
    int znak;
    FILE *plik;
    char *ptr;
    strcpy(fname, argv[0]);
    ptr = strrchr(fname, '\\');
    if(ptr == NULL) {
        strcpy(fname, MYFILE);
    }
    else {
        strcpy(ptr+1, MYFILE);
    }
    plik = fopen(fname, "r");
    if(plik == NULL) {
        printf("Can't open %s\n", fname);
    }
    else {
        znak = getc(plik);
        printf("First char of %s is %c\n", fname, znak);
        fclose(plik);
    }
    getchar();
    return 0;
}

【讨论】:

    【解决方案2】:

    试试

    if (plik == NULL) { perror("plik.txt"); exit(EXIT_FAILURE); }
    

    为了更好地了解错误原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2019-05-10
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多