12 个解决方案
#1
用while循环,fgetc一个一个读字符存到数组中!
然后再把整个数组一次存在文件中!用fwrite()。
然后再把整个数组一次存在文件中!用fwrite()。
#2
fread()
#3
自己查函数表是最好的学习方法。
#4
fread. 这种时候就需要多查查工具书,更简单的是 google
#5
while(fgets() != NULL){
……
}
……
}
#6
给个 例子
#7
用文件的方式打开与读写吧
FILE* fp;
fopen();
fwrite();
具体例子在msdn上看吧
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++;
}
这样写 对不对 传到数组中
{
j++;
}
这样写 对不对 传到数组中
#10
可以的,循环完后置结束标志, 覆盖读入到数组的文件结束符:
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()。
然后再把整个数组一次存在文件中!用fwrite()。
#2
fread()
#3
自己查函数表是最好的学习方法。
#4
fread. 这种时候就需要多查查工具书,更简单的是 google
#5
while(fgets() != NULL){
……
}
……
}
#6
给个 例子
#7
用文件的方式打开与读写吧
FILE* fp;
fopen();
fwrite();
具体例子在msdn上看吧
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++;
}
这样写 对不对 传到数组中
{
j++;
}
这样写 对不对 传到数组中
#10
可以的,循环完后置结束标志, 覆盖读入到数组的文件结束符:
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语言文件才做函数的用法,讲的细,这里怎么能讲好