鱼C论坛

 找回密码
 立即注册
查看: 976|回复: 1

[已解决]打不开指定文件

[复制链接]
发表于 2024-6-18 10:29:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void inputinfo()
{
        FILE* fp;
        int i = 0;
        if ((fp = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb")) == NULL)
        {
                printf("无法打开文件!\n");
                return;
        }
        fprintf(fp, "%d\n", n);
        while (i < n)
        {
                fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", teacher[i].ID, teacher[i].name, teacher[i].sex, teacher[i].college, teacher[i].birth, teacher[i].edu, teacher[i].position, teacher[i].wage, teacher[i].tel);
                i++;
        }
        fclose(fp);
}
运行一直显示无法打开文件
最佳答案
2024-6-18 10:29:18
你好呀,看起来你在编写一个保存教师信息到文件的程序,但遇到了文件无法打开的问题。让我来帮助你分析和解决这个问题。

首先,你的代码使用 `fopen_s` 函数打开文件,但使用方式有些问题。正确的使用 `fopen_s` 的方式是:

  1. errno_t fopen_s(FILE** pFile, const char* filename, const char* mode);
复制代码


让我们先看看你现有的代码:

  1. void inputinfo()
  2. {
  3.         FILE* fp;
  4.         int i = 0;
  5.         if ((fp = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb")) == NULL)
  6.         {
  7.                 printf("无法打开文件!\n");
  8.                 return;
  9.         }
  10.         fprintf(fp, "%d\n", n);
  11.         while (i < n)
  12.         {
  13.                 fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", teacher.ID, teacher.name, teacher.sex, teacher.college, teacher.birth, teacher.edu, teacher.position, teacher.wage, teacher.tel);
  14.                 i++;
  15.         }
  16.         fclose(fp);
  17. }
复制代码


如你所见,`fopen_s` 返回一个 `errno_t` 类型的错误码,而不是一个文件指针,所以你的条件判断语句是有问题的。正确的做法如下:

  1. #include <stdio.h>

  2. // 假设teacher结构体与n已经定义好

  3. void inputinfo()
  4. {
  5.         FILE* fp;
  6.         errno_t err;

  7.         // 使用fopen_s打开文件
  8.         err = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb");
  9.         if (err != 0)
  10.         {
  11.                 printf("无法打开文件!\n");
  12.                 return;
  13.         }

  14.         // 假设n为要写入的教师数量,并且教师信息保存在teacher结构体中
  15.         fprintf(fp, "%d\n", n);
  16.         for (int i = 0; i < n; i++)
  17.         {
  18.                 fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
  19.                         teacher[i].ID,
  20.                         teacher[i].name,
  21.                         teacher[i].sex,
  22.                         teacher[i].college,
  23.                         teacher[i].birth,
  24.                         teacher[i].edu,
  25.                         teacher[i].position,
  26.                         teacher[i].wage,
  27.                         teacher[i].tel);
  28.         }

  29.         fclose(fp);
  30. }
复制代码


注意这里几点:
1. `errno_t err` 用来接收 `fopen_s` 的返回值。
2. 当 `fopen_s` 成功时,`err` 值应为 0。
3. 根据你假设的 `teacher` 是个数组,我们依次写入每位教师的信息。

最后,如果你还是无法打开文件,请检查以下几点:
1. 确保路径是正确的,文件夹确实存在。
2. 检查文件是否被其他程序占用。
3. 检查权限问题,确保你的程序有写入该目录的权限。

希望这个能帮助你顺利解决问题,祝你编程愉快!如果有其他问题,欢迎随时提问~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-6-18 10:29:18 | 显示全部楼层    本楼为最佳答案   
你好呀,看起来你在编写一个保存教师信息到文件的程序,但遇到了文件无法打开的问题。让我来帮助你分析和解决这个问题。

首先,你的代码使用 `fopen_s` 函数打开文件,但使用方式有些问题。正确的使用 `fopen_s` 的方式是:

  1. errno_t fopen_s(FILE** pFile, const char* filename, const char* mode);
复制代码


让我们先看看你现有的代码:

  1. void inputinfo()
  2. {
  3.         FILE* fp;
  4.         int i = 0;
  5.         if ((fp = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb")) == NULL)
  6.         {
  7.                 printf("无法打开文件!\n");
  8.                 return;
  9.         }
  10.         fprintf(fp, "%d\n", n);
  11.         while (i < n)
  12.         {
  13.                 fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", teacher.ID, teacher.name, teacher.sex, teacher.college, teacher.birth, teacher.edu, teacher.position, teacher.wage, teacher.tel);
  14.                 i++;
  15.         }
  16.         fclose(fp);
  17. }
复制代码


如你所见,`fopen_s` 返回一个 `errno_t` 类型的错误码,而不是一个文件指针,所以你的条件判断语句是有问题的。正确的做法如下:

  1. #include <stdio.h>

  2. // 假设teacher结构体与n已经定义好

  3. void inputinfo()
  4. {
  5.         FILE* fp;
  6.         errno_t err;

  7.         // 使用fopen_s打开文件
  8.         err = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb");
  9.         if (err != 0)
  10.         {
  11.                 printf("无法打开文件!\n");
  12.                 return;
  13.         }

  14.         // 假设n为要写入的教师数量,并且教师信息保存在teacher结构体中
  15.         fprintf(fp, "%d\n", n);
  16.         for (int i = 0; i < n; i++)
  17.         {
  18.                 fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
  19.                         teacher[i].ID,
  20.                         teacher[i].name,
  21.                         teacher[i].sex,
  22.                         teacher[i].college,
  23.                         teacher[i].birth,
  24.                         teacher[i].edu,
  25.                         teacher[i].position,
  26.                         teacher[i].wage,
  27.                         teacher[i].tel);
  28.         }

  29.         fclose(fp);
  30. }
复制代码


注意这里几点:
1. `errno_t err` 用来接收 `fopen_s` 的返回值。
2. 当 `fopen_s` 成功时,`err` 值应为 0。
3. 根据你假设的 `teacher` 是个数组,我们依次写入每位教师的信息。

最后,如果你还是无法打开文件,请检查以下几点:
1. 确保路径是正确的,文件夹确实存在。
2. 检查文件是否被其他程序占用。
3. 检查权限问题,确保你的程序有写入该目录的权限。

希望这个能帮助你顺利解决问题,祝你编程愉快!如果有其他问题,欢迎随时提问~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 09:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表