【问题标题】:Understanding of file handling in C理解 C 中的文件处理
【发布时间】:2011-12-22 13:26:07
【问题描述】:

我究竟如何从 C 中的文件中获取输入?

例如:假设我将文件指针分配给特定文件并希望执行某些操作。分配文件指针的语法到底是什么 假设文件位于 C:\Acads\bin\File.txt。 当我尝试这个时在我的代码中

FILE *fp1;
fp1=("C:\Acads\bin\File.txt","r+");

它最终给了我一个错误。

更新: 好的,这是我的主要疑问。

我究竟如何告诉编译器我的文件位于某某路径。 我已经尝试了你们告诉我的一切,但无济于事。

【问题讨论】:

  • 只是为了好玩(和调试)打印文件名:printf("The file is named %s\n", "C:\Acads\bin\File.txt"); :)
  • 只用谷歌搜索你的问题标题就会得到大量有效的结果。

标签: c file-io


【解决方案1】:

我想你遇到了一个错字:它应该说:

fp1=fopen(filename,"r+");

您还必须使用另一个反斜杠来转义每个反斜杠字符 \

fp1=fopen("C:\\Acads\\bin\\File.txt","r+");

这是因为\ 开始了一个转义序列。例如:\n 表示换行符。 \\ 扩展为一个简单的反斜杠。

【讨论】:

  • 好吧,我忘了'\'是一个特殊的字符。但是尽管按照你告诉我的去做,它仍然无法正常工作......我的下一个陡峭是 c=getc(fp1); printf("%c",c);当我尝试运行此代码时,它给了我一个错误
  • 我自己打错了,应该是fopen 而不是open。另外请给出确切的编译器/链接器错误,以便我们找出问题所在。
  • 文件 *fp1; fp1=fopen("C:\\Academics\\gcc\bin\\pe.txt","r+"); printf("打开的文件\n"); c=getc(fp1); printf("%c",c);编译器没有给我任何错误,但是当我运行程序时它不会打印所需的输出。
  • 请提供所有信息。实际发生了什么?该程序是否打印任何内容?它会崩溃吗?你试过调试吗?
  • 我真的不知道如何在这里解释自己。我可以编译程序,它没有显示任何警告或错误。但是当我点击运行时,一个窗口弹出屏幕来了,说我的程序已经停止响应。例如,当我遇到无限循环或尝试除以 0 时,就会发生这种情况
【解决方案2】:

This 应该为您提供 C 中文件处理的概述。您可以使用 fopen 打开文件并使用 perror 查看是否出现问题。这些方面的内容:

FILE *fp;
fp= fopen("C:\\Acads\\bin\\File.txt","r+"); /* You have to escape \ in C as it is a special character*/
if ( fp == NULL)
{
  perror("fopen");
  /*Handle error*/
}
/* File operations */
fclose(fp);

希望这会有所帮助!

【讨论】:

  • 您是否收到来自perror 的任何错误消息? fp 好吗?如果您使用的是getc,请记住它返回的是int 而不是char
【解决方案3】:

这是一个使用fopen的简单示例

FILE *fp;
fp = fopen(path, "r+");

看看man fopen

【讨论】:

    【解决方案4】:

    您应该在尝试阅读之前打开文件。 这是一个如何打开文件并读取后续行的完整示例。

    http://www.phanderson.com/files/file_read.html

    【讨论】:

    • 是的,但是在这里,他们没有提到文件的存储位置。就像程序如何知道文件的位置一样?这就是我不理解的
    【解决方案5】:

    文件指针是一个指向结构的指针,其中包含有关文件的某些信息,例如文件的位置、文件的大小以及其他信息,具体取决于您的操作系统和 libc 实现。

    现在,重点是您不必担心该结构真正包含的内容。您只知道可以有一个指针,并且库函数知道如何处理它。这提供了出色的可移植性特性,这意味着即使在具有完全不同的文件处理方式的系统上,您的代码也可以原封不动地工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多