C中的文件I / O - 如何从文件中读取然后写入文件?

时间:2015-05-24 18:29:48

标签: c file-io fopen fgetc

我是新手在C中提交i / o,在我的代码中我想从文本文件中读取信息然后写入它。 我尝试使用fopen(“file.csv”,“r + t”)打开一个csv文件,以便能够读取然后写入同一个文件。所以我使用fgetc然后使用fputc,但由于某种原因,fputc函数不起作用。当我尝试切换顺序时,字符被打印到文件没有问题,但看起来fgetc在下一个位置放置了一个未知字符。 我做错了什么,或者实际上是不可能在同一个流中读取和写入文件?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

打开文件进行读写操作时,在操作之间切换时会使用fseek()。 fseek( fp, 0, SEEK_CUR);不会更改文件中文件指针的位置。

#include<stdio.h>
#include<stdlib.h>

int main ( ) {
    int read = 0;
    int write = 48;
    int each = 0;
    FILE *fp;

    fp = fopen("z.txt", "w");//create a file
    if (fp == NULL)
    {
        printf("Error while opening the file.\n");
        return 0;
    }
    fprintf ( fp, "abcdefghijklmnopqrstuvwxyz");
    fclose ( fp);

    fp = fopen("z.txt", "r+");//open the file for read and write
    if (fp == NULL)
    {
        printf("Error while opening the file.\n");
        return 0;
    }

    for ( each = 0; each < 5; each++) {
        fputc ( write, fp);
        write++;
    }
    fseek ( fp, 0, SEEK_CUR);//finished with writes. switching to read

    for ( each = 0; each < 5; each++) {
        read = fgetc ( fp);
        printf ( "%c ", read);
    }
    printf ( "\n");
    fseek ( fp, 0, SEEK_CUR);//finished with reads. switching to write

    for ( each = 0; each < 5; each++) {
        fputc ( write, fp);
        write++;
    }
    fseek ( fp, 0, SEEK_CUR);//finished with writes. switching to read

    for ( each = 0; each < 5; each++) {
        read = fgetc ( fp);
        printf ( "%c ", read);
    }
    printf ( "\n");

    fclose ( fp);
    return 0;
}

输出
最初包含的文件

  

abcdefghijklmnopqrstuvwxyz

读取和写入后

,它包含

  

01234fghij56789pqrstuvwxyz