怎么 从文件1中读出内容 写入另一个文件保存

时间:2021-03-02 19:52:48
  我想的是 从文件1中读出内容 存在buf数组中  然后在把buf写入另一个文件中 我用了 fgets 真能读一行。fscanf更不行 ,文件相关的这些函数不会用  请大侠给我写个示例  

12 个解决方案

#1


用while循环,fgetc一个一个读字符存到数组中!
然后再把整个数组一次存在文件中!用fwrite()。

#2


fread()

#3


自己查函数表是最好的学习方法。

#4


fread. 这种时候就需要多查查工具书,更简单的是 google

#5


while(fgets() != NULL){
    ……
}

#6


引用 1 楼 zhzxlc_06 的回复:
用while循环,fgetc一个一个读字符存到数组中!
然后再把整个数组一次存在文件中!用fwrite()。

给个 例子 

#7


用文件的方式打开与读写吧
FILE* fp;
fopen();
fwrite();
具体例子在msdn上看吧

#8


给一个fgetc/fputc的例子,把fputc与fgetc语句后面的注释同时打开,同时注释掉fputc/fgetc语句,可以作为fread/fwrite的例子.

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

typedef struct node {
unsigned char elem;
struct node *next;
} Node, *List;

int main()
{
char file_name[255] = "d:\\梁静茹-今天情人节.mp3"; //d盘符下要有这个文件.
List head = (List)malloc(sizeof(Node));
List p, q;
int c;
FILE *fp;
if(head == NULL) {
fprintf(stderr, "malloc error!\n");
exit(1);
}
head->next = NULL;
q = head;
if((fp=fopen(file_name, "rb")) == NULL) {
fprintf(stderr, "打开文件失败!\n");
exit(1);
}
while((c=fgetc(fp)) != EOF) {
//while(fread(&c,sizeof(unsigned char), 1, fp)) {
p = (List)malloc(sizeof(Node));
if(p == NULL) {
fprintf(stderr, "malloc error!\n");
p = head;
while(p != NULL) {
q = p->next;
free(p);
p = q;
}
exit(1);
}
p->elem = c;
p->next = NULL;
q->next = p;
q = p;
}
fclose(fp);

if((fp=fopen("d:\\今天情人节副本.mp3", "wb")) == NULL) {
fprintf(stderr, "打开文件失败!\n");
exit(1);
}
p = head->next;
while(p != NULL) {
q = p->next;
fputc(p->elem, fp);
//fwrite(&p->elem, sizeof(unsigned char), 1, fp);
free(p);
p = q;
}
printf("复制完成..\n");
fclose(fp);
return 0;
}

#9


 while( (buf[j]=fgetc(fp)) != EOF )
   {
   j++;
   } 

这样写 对不对  传到数组中

#10


引用 9 楼 jldream110 的回复:
 while( (buf[j]=fgetc(fp)) != EOF )
   {
   j++;
   } 

这样写 对不对  传到数组中

可以的,循环完后置结束标志, 覆盖读入到数组的文件结束符:
buf[j] = '\0';

也可以写成这样:
while( (c=fgetc(fp)) != EOF )
{
    buf[j++] = c;

buf[j] = '\0';  //置结束标志.

#11


fread(),fwrite()。不用循环就可以啦……

FILE * source = fopen( 源文件名, "rb" );    // 只读方式打开源文件
FILE * destination = fopen( 目标文件名, "wb" );    // 只写方式打开目标文件
void * buffer;    // 缓冲区指针
int size;    // 源文件大小

fseek( source, 0, SEEK_END );    // 将源文件的指针移动到末尾
int size = ftell(fp);    // 获取源文件大小
buffer = malloc(size);    // 申请缓冲区
fseek( source, 0, SEEK_SET );    // 将源文件的指针移动到开头
fread( buffer, size, 1, source );    // 读取
fwrite( buffer, size, 1, destination );    // 写入
fclose( source );    // 关闭源文件
fclose( destination );    // 关闭目标文件
free( buffer );    // 释放缓冲区

当然,如果文件比较大,也可以多次读入、写出

const int BUFFER_SIZE = ……;    // 缓冲区大小
void * buffer = malloc(BUFFER_SIZE);
for ( int i=0; !feof(source); i++ )
{
    fseek( source, i * BUFFER_SIZE, SEEK_SET );
    fread( buffer, BUFFER_SIZE, 1, source );
    fwrite( buffer, BUFFER_SIZE, 1, destination );
}

#12


函数自己学,你可以上网搜c语言文件才做函数的用法,讲的细,这里怎么能讲好

#1


用while循环,fgetc一个一个读字符存到数组中!
然后再把整个数组一次存在文件中!用fwrite()。

#2


fread()

#3


自己查函数表是最好的学习方法。

#4


fread. 这种时候就需要多查查工具书,更简单的是 google

#5


while(fgets() != NULL){
    ……
}

#6


引用 1 楼 zhzxlc_06 的回复:
用while循环,fgetc一个一个读字符存到数组中!
然后再把整个数组一次存在文件中!用fwrite()。

给个 例子 

#7


用文件的方式打开与读写吧
FILE* fp;
fopen();
fwrite();
具体例子在msdn上看吧

#8


给一个fgetc/fputc的例子,把fputc与fgetc语句后面的注释同时打开,同时注释掉fputc/fgetc语句,可以作为fread/fwrite的例子.

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

typedef struct node {
unsigned char elem;
struct node *next;
} Node, *List;

int main()
{
char file_name[255] = "d:\\梁静茹-今天情人节.mp3"; //d盘符下要有这个文件.
List head = (List)malloc(sizeof(Node));
List p, q;
int c;
FILE *fp;
if(head == NULL) {
fprintf(stderr, "malloc error!\n");
exit(1);
}
head->next = NULL;
q = head;
if((fp=fopen(file_name, "rb")) == NULL) {
fprintf(stderr, "打开文件失败!\n");
exit(1);
}
while((c=fgetc(fp)) != EOF) {
//while(fread(&c,sizeof(unsigned char), 1, fp)) {
p = (List)malloc(sizeof(Node));
if(p == NULL) {
fprintf(stderr, "malloc error!\n");
p = head;
while(p != NULL) {
q = p->next;
free(p);
p = q;
}
exit(1);
}
p->elem = c;
p->next = NULL;
q->next = p;
q = p;
}
fclose(fp);

if((fp=fopen("d:\\今天情人节副本.mp3", "wb")) == NULL) {
fprintf(stderr, "打开文件失败!\n");
exit(1);
}
p = head->next;
while(p != NULL) {
q = p->next;
fputc(p->elem, fp);
//fwrite(&p->elem, sizeof(unsigned char), 1, fp);
free(p);
p = q;
}
printf("复制完成..\n");
fclose(fp);
return 0;
}

#9


 while( (buf[j]=fgetc(fp)) != EOF )
   {
   j++;
   } 

这样写 对不对  传到数组中

#10


引用 9 楼 jldream110 的回复:
 while( (buf[j]=fgetc(fp)) != EOF )
   {
   j++;
   } 

这样写 对不对  传到数组中

可以的,循环完后置结束标志, 覆盖读入到数组的文件结束符:
buf[j] = '\0';

也可以写成这样:
while( (c=fgetc(fp)) != EOF )
{
    buf[j++] = c;

buf[j] = '\0';  //置结束标志.

#11


fread(),fwrite()。不用循环就可以啦……

FILE * source = fopen( 源文件名, "rb" );    // 只读方式打开源文件
FILE * destination = fopen( 目标文件名, "wb" );    // 只写方式打开目标文件
void * buffer;    // 缓冲区指针
int size;    // 源文件大小

fseek( source, 0, SEEK_END );    // 将源文件的指针移动到末尾
int size = ftell(fp);    // 获取源文件大小
buffer = malloc(size);    // 申请缓冲区
fseek( source, 0, SEEK_SET );    // 将源文件的指针移动到开头
fread( buffer, size, 1, source );    // 读取
fwrite( buffer, size, 1, destination );    // 写入
fclose( source );    // 关闭源文件
fclose( destination );    // 关闭目标文件
free( buffer );    // 释放缓冲区

当然,如果文件比较大,也可以多次读入、写出

const int BUFFER_SIZE = ……;    // 缓冲区大小
void * buffer = malloc(BUFFER_SIZE);
for ( int i=0; !feof(source); i++ )
{
    fseek( source, i * BUFFER_SIZE, SEEK_SET );
    fread( buffer, BUFFER_SIZE, 1, source );
    fwrite( buffer, BUFFER_SIZE, 1, destination );
}

#12


函数自己学,你可以上网搜c语言文件才做函数的用法,讲的细,这里怎么能讲好