鱼C论坛

 找回密码
 立即注册
查看: 48|回复: 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` 的方式是:
errno_t fopen_s(FILE** pFile, const char* filename, const char* mode);

让我们先看看你现有的代码:
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.ID, teacher.name, teacher.sex, teacher.college, teacher.birth, teacher.edu, teacher.position, teacher.wage, teacher.tel);
                i++;
        }
        fclose(fp);
}

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

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

void inputinfo()
{
        FILE* fp;
        errno_t err;

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

        // 假设n为要写入的教师数量,并且教师信息保存在teacher结构体中
        fprintf(fp, "%d\n", n);
        for (int i = 0; i < n; i++)
        {
                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);
        }

        fclose(fp);
}

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

首先,你的代码使用 `fopen_s` 函数打开文件,但使用方式有些问题。正确的使用 `fopen_s` 的方式是:
errno_t fopen_s(FILE** pFile, const char* filename, const char* mode);

让我们先看看你现有的代码:
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.ID, teacher.name, teacher.sex, teacher.college, teacher.birth, teacher.edu, teacher.position, teacher.wage, teacher.tel);
                i++;
        }
        fclose(fp);
}

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

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

void inputinfo()
{
        FILE* fp;
        errno_t err;

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

        // 假设n为要写入的教师数量,并且教师信息保存在teacher结构体中
        fprintf(fp, "%d\n", n);
        for (int i = 0; i < n; i++)
        {
                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);
        }

        fclose(fp);
}

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-27 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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