我怎么可以把第一个0更新为1,而后边的1234不被删掉~~
我用fp = fopen (filename , "w") ;
fputc ('1' , fp ) ;
就会导致文件内容只有1,而其他都没了……
谁来帮帮忙,多谢
16 个解决方案
#1
一般要从新写这个文件,处理好数据,存在数据结构中,重写文件
#2
使用w作为参数表示写文件,如果文件存在则将覆盖原文件,意思就是把原来文件的内容全部删除后重来,如果用a的话也只是在文件尾添加,所以建议楼主把文件内容都读出来,在内存中修改完之后再一起写回去就可以了
#3
用r+作参数就可以了。
#4
同意楼上.如果是随机更改位置话注意结合用fseek定位.
#5
测试代码如下:
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
完全正常
实验环境:MS Windows2000 Professional Edition + Visual C++ 6.0
我不知道你的情况是怎样出现的,你用上面的代码试一下吧
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
完全正常
实验环境:MS Windows2000 Professional Edition + Visual C++ 6.0
我不知道你的情况是怎样出现的,你用上面的代码试一下吧
#6
下面是fopen中打开方式"w"的相关说明:
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
很显然用"w"方式打开必然会损坏原有内容
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
很显然用"w"方式打开必然会损坏原有内容
#7
支持楼上的
#8
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
========
为什么不是0123456Dd?
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
========
为什么不是0123456Dd?
#9
为什么不是0123456d?
上面的我弄错了
上面的我弄错了
#10
上面的我又弄错了,我以外打开方式是a+,看错了.呵呵
#11
r+
#12
首先以读写方式打开(r+ w+ a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾),一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针fseek(fp,-1L,SEEK_CUR),再写入,由于在C中规定:
以上述三种方式打开文件,既可读又可写,但:在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以。。。要转换读写状态。
在C语言中对流式文件进行操作时,打开文件后,有一个读写位置指针,记录的是读写时在文件中的位置,其初始状态与打开方式有关。r、r+方式打开时,它指向文件头;w、w+方式打开时,也指向文件头(注意:虽然读写位置指针指向相同,但这两种方式对文件是否已存在处理不同,r、r+打开时,只有当文件已存在才能正确打开,若文件不存在,出错,而w、w+方式打开时,文件不存在,则生成该文件,若文件存在,删除后再重新生成),a,a+方式打开时,读写位置指针指向文件尾,若文件不存在,看具体的系统,在turbo c 中与w、w+方式相同,即生成新文件。
r 只读,w 只写 a 追加,也是只写
r+ w+ a+既可读又可写,但:
在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
rewind(FILE *fp)是将fp所指向文件中的读写位置指针移动到文件头
fseek(FILE *fp, long offset, int i)是在文件中随意移动读写位置指针
int i是移动基准点, 在stdio.h中定义了三个宏
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
long offset 相对于基准点的位移量,单位为字节数,
当>0 向前,即从基准点向文件尾方向移动offset个字节数,
=0, 其实就是移动到基准点
<0 向后,即从基准点向文件头方向移动offset个字节数,
#include <stdio.h>
void main()
{
char ch;
int i=0;
FILE *fp;
fp=fopen("d:\\tc\\aaa.txt","r+");
if(!fp)
{
printf("can not open the file!\n");
exit(0);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch>='a'&&ch<='z')
{ ch=ch-32;
fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/
fputc(ch,fp);
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
}
}
fclose(fp);
}
以上述三种方式打开文件,既可读又可写,但:在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以。。。要转换读写状态。
在C语言中对流式文件进行操作时,打开文件后,有一个读写位置指针,记录的是读写时在文件中的位置,其初始状态与打开方式有关。r、r+方式打开时,它指向文件头;w、w+方式打开时,也指向文件头(注意:虽然读写位置指针指向相同,但这两种方式对文件是否已存在处理不同,r、r+打开时,只有当文件已存在才能正确打开,若文件不存在,出错,而w、w+方式打开时,文件不存在,则生成该文件,若文件存在,删除后再重新生成),a,a+方式打开时,读写位置指针指向文件尾,若文件不存在,看具体的系统,在turbo c 中与w、w+方式相同,即生成新文件。
r 只读,w 只写 a 追加,也是只写
r+ w+ a+既可读又可写,但:
在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
rewind(FILE *fp)是将fp所指向文件中的读写位置指针移动到文件头
fseek(FILE *fp, long offset, int i)是在文件中随意移动读写位置指针
int i是移动基准点, 在stdio.h中定义了三个宏
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
long offset 相对于基准点的位移量,单位为字节数,
当>0 向前,即从基准点向文件尾方向移动offset个字节数,
=0, 其实就是移动到基准点
<0 向后,即从基准点向文件头方向移动offset个字节数,
#include <stdio.h>
void main()
{
char ch;
int i=0;
FILE *fp;
fp=fopen("d:\\tc\\aaa.txt","r+");
if(!fp)
{
printf("can not open the file!\n");
exit(0);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch>='a'&&ch<='z')
{ ch=ch-32;
fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/
fputc(ch,fp);
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
}
}
fclose(fp);
}
#13
这是以前回答的一个小写改大写字母的程序,给你参考一下
#14
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
===
不太明白这句的作用
===
不太明白这句的作用
#15
没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
这里说得很清楚 了
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
这里说得很清楚 了
#16
明白了,谢谢!!!!!!!!
#1
一般要从新写这个文件,处理好数据,存在数据结构中,重写文件
#2
使用w作为参数表示写文件,如果文件存在则将覆盖原文件,意思就是把原来文件的内容全部删除后重来,如果用a的话也只是在文件尾添加,所以建议楼主把文件内容都读出来,在内存中修改完之后再一起写回去就可以了
#3
用r+作参数就可以了。
#4
同意楼上.如果是随机更改位置话注意结合用fseek定位.
#5
测试代码如下:
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
完全正常
实验环境:MS Windows2000 Professional Edition + Visual C++ 6.0
我不知道你的情况是怎样出现的,你用上面的代码试一下吧
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
完全正常
实验环境:MS Windows2000 Professional Edition + Visual C++ 6.0
我不知道你的情况是怎样出现的,你用上面的代码试一下吧
#6
下面是fopen中打开方式"w"的相关说明:
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
很显然用"w"方式打开必然会损坏原有内容
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
很显然用"w"方式打开必然会损坏原有内容
#7
支持楼上的
#8
#include "stdio.h"
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
========
为什么不是0123456Dd?
int main(void)
{
FILE* fp = fopen("test.txt","r+");
fputc ('d' , fp );
fclose(fp);
return 0;
}
文件test.txt原始内容为
0123456
运行以上代码后文件内容为
d123456
========
为什么不是0123456Dd?
#9
为什么不是0123456d?
上面的我弄错了
上面的我弄错了
#10
上面的我又弄错了,我以外打开方式是a+,看错了.呵呵
#11
r+
#12
首先以读写方式打开(r+ w+ a+都可以,不过要注意读写位置指针分别指向文件头、文件头、文件尾),一次读一个字符(此时读写位置指针指向此字节后面,判断后,若要转换,移动读写位置指针fseek(fp,-1L,SEEK_CUR),再写入,由于在C中规定:
以上述三种方式打开文件,既可读又可写,但:在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以。。。要转换读写状态。
在C语言中对流式文件进行操作时,打开文件后,有一个读写位置指针,记录的是读写时在文件中的位置,其初始状态与打开方式有关。r、r+方式打开时,它指向文件头;w、w+方式打开时,也指向文件头(注意:虽然读写位置指针指向相同,但这两种方式对文件是否已存在处理不同,r、r+打开时,只有当文件已存在才能正确打开,若文件不存在,出错,而w、w+方式打开时,文件不存在,则生成该文件,若文件存在,删除后再重新生成),a,a+方式打开时,读写位置指针指向文件尾,若文件不存在,看具体的系统,在turbo c 中与w、w+方式相同,即生成新文件。
r 只读,w 只写 a 追加,也是只写
r+ w+ a+既可读又可写,但:
在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
rewind(FILE *fp)是将fp所指向文件中的读写位置指针移动到文件头
fseek(FILE *fp, long offset, int i)是在文件中随意移动读写位置指针
int i是移动基准点, 在stdio.h中定义了三个宏
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
long offset 相对于基准点的位移量,单位为字节数,
当>0 向前,即从基准点向文件尾方向移动offset个字节数,
=0, 其实就是移动到基准点
<0 向后,即从基准点向文件头方向移动offset个字节数,
#include <stdio.h>
void main()
{
char ch;
int i=0;
FILE *fp;
fp=fopen("d:\\tc\\aaa.txt","r+");
if(!fp)
{
printf("can not open the file!\n");
exit(0);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch>='a'&&ch<='z')
{ ch=ch-32;
fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/
fputc(ch,fp);
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
}
}
fclose(fp);
}
以上述三种方式打开文件,既可读又可写,但:在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以。。。要转换读写状态。
在C语言中对流式文件进行操作时,打开文件后,有一个读写位置指针,记录的是读写时在文件中的位置,其初始状态与打开方式有关。r、r+方式打开时,它指向文件头;w、w+方式打开时,也指向文件头(注意:虽然读写位置指针指向相同,但这两种方式对文件是否已存在处理不同,r、r+打开时,只有当文件已存在才能正确打开,若文件不存在,出错,而w、w+方式打开时,文件不存在,则生成该文件,若文件存在,删除后再重新生成),a,a+方式打开时,读写位置指针指向文件尾,若文件不存在,看具体的系统,在turbo c 中与w、w+方式相同,即生成新文件。
r 只读,w 只写 a 追加,也是只写
r+ w+ a+既可读又可写,但:
在没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
rewind(FILE *fp)是将fp所指向文件中的读写位置指针移动到文件头
fseek(FILE *fp, long offset, int i)是在文件中随意移动读写位置指针
int i是移动基准点, 在stdio.h中定义了三个宏
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
long offset 相对于基准点的位移量,单位为字节数,
当>0 向前,即从基准点向文件尾方向移动offset个字节数,
=0, 其实就是移动到基准点
<0 向后,即从基准点向文件头方向移动offset个字节数,
#include <stdio.h>
void main()
{
char ch;
int i=0;
FILE *fp;
fp=fopen("d:\\tc\\aaa.txt","r+");
if(!fp)
{
printf("can not open the file!\n");
exit(0);
}
while(!feof(fp))
{
ch=fgetc(fp);
if(ch>='a'&&ch<='z')
{ ch=ch-32;
fseek(fp,-1L,SEEK_CUR);/*向前移动1个字节*/
fputc(ch,fp);
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
}
}
fclose(fp);
}
#13
这是以前回答的一个小写改大写字母的程序,给你参考一下
#14
fseek(fp,0L,SEEK_CUR);/*转换读写状态,并不移动*/
===
不太明白这句的作用
===
不太明白这句的作用
#15
没有插入fseek()或rewind()的情况下,写不可以直接跟在读后面,在没有插入fseek()rewind()或碰到文件结束的情况下,读不可以直接跟在写后面。所以,想同时对文件进行读写
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
这里说得很清楚 了
,必须在读写状态转换时调用fseek()或rewind()函数。
再你自己仔细看看fseek()、rewind()函数是干什么的
这里说得很清楚 了
#16
明白了,谢谢!!!!!!!!