用 C 读写文件

Posted

技术标签:

【中文标题】用 C 读写文件【英文标题】:Read and Write Files in C 【发布时间】:2018-10-30 17:58:16 【问题描述】:

我的任务:

编写一个程序,询问用户是读取还是写入文件。如果写入文件,它会要求输入一行文本,并将其写入文件。如果读取,它会读取文件并将其输出到屏幕。文本以非二进制模式写出 - 这与项目 #2 的文件读写不同。记住我们如何使用fgets() 输入字符串。还有一个fputs()

我正在尝试编写写入部分的代码,但我无法弄清楚我的错误是什么。另外我真的不知道如何创建阅读部分。那我只需要打开文件吗?

我的代码是:

#include <stdio.h>

#define HOLD_SCREEN while(getchar()!='q')

int write() 
    int num;
    FILE*fptr;
    fptr = fopen_s;
    if (fptr == NULL) 
        printf("ERROR");
        exit(1);
    
    printf("Enter num: ");
    scanf_s("%d", &num);
    fprintf(fptr, "%d", num);
    fclose(fptr);
    return(0);


int main(void) 
    while (1) 
        printf("\n\tEnter an option: (R)ead or (W)rite a file or enter a q if you want to quit: ");
        char buf[50];
        buf[0] = '\0';
        scanf_s("%s", buf, 50);
        switch (toupper(buf[0])) 
        case 'W':
            write();
            break;
        case 'R':
            printInventory();
            break;
        case 'Q':
            return(0);
        
    

    HOLD_SCREEN;
    return(0);

非常感谢您的帮助。

【问题讨论】:

fptr = fopen_s; ??文件名和其他安全检查在哪里? 当您尝试编译代码时,您的编译器会给出哪些错误和警告? 试试fptr = fopen("myfile.txt","w"); 不要使用scanf_s()。它并不比普通的scanf() 更安全,而且它不便携。指出任何推动 C 的附件 K 元素(例如 scanf_s())的人:Field Experience With Annex K — Bounds Checking Interfaces:“由于与规范存在大量偏差,因此不能认为 Microsoft 实现符合或可移植。” 在开始阅读 R/W/q 选项时,我建议您使用getchar 而不是scanf_s 【参考方案1】:

写作:

fopen_s需要3个参数,

errno_t fopen_s(FILE** pFile, const char *filename, const char *mode); 

一个例子(在写模式下)

errno_t err;
FILE *fptr
err = fopen_s(&fptr, "text.txt", "w" );

我也冒昧地猜测这是使用fopen_s 而不是fopen 的微软堆栈。否则,你应该使用fopen like

FILE *fptr
fptr= fopen("text.txt", "w");

阅读:

除了第三个参数之外,类似的参数是 err = fopen_s(&amp;fptr, "text.txt", "r" );fptr = fopen("text.txt, "r") 并使用 fgets 读取一行输入(有很多示例)。

【讨论】:

以上是关于用 C 读写文件的主要内容,如果未能解决你的问题,请参考以下文章

用 C 读写文件

C# winform Win7 C盘读写文件 没有权限

用C读写二进制文件?

c_cpp 用C读写文件

MicroBlaze如何对DDR2进行读写操作?有没有api函数可以用?用C语言如何实现对DDR2的读写?

C++Python文件读写定位等操作