huafeng 发表于 2024-6-18 10:29:02

打不开指定文件

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);
}
运行一直显示无法打开文件

FishC 发表于 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.ID,
                        teacher.name,
                        teacher.sex,
                        teacher.college,
                        teacher.birth,
                        teacher.edu,
                        teacher.position,
                        teacher.wage,
                        teacher.tel);
        }

        fclose(fp);
}

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 打不开指定文件