Ⅰ C语言,怎将文件中指定位置上的数据更新后覆盖
你需要解决两来个问题。1、待源更改的文件应该是以“块”状形式写入的,比如fwrite((void *)student stu,sizeof(student),1L,fp);,只有这样才能准确定位待更改“块”的位置。而以fprintf()写入的文件,可能由于数据的不同,每个结构数据占用的空间就不同,即使你能准确定位,但写入新数据后,若长度短了,剩余的空间可能造成混乱,若长度长了,可能造成”覆盖“。2、打开文件同时用于”读/写“时,打开的格式是"r+"或”w+“。另外,还需要搞清楚文件读写指针的使用特点,前两个问题解决后再讨论。
Ⅱ C语言 怎么替换文件中的某一段
比较稳妥的办法是:
写方式创建一个临时文件。
将原文件逐字向临时文件拷贝,拷到你要替换的内容处,转而拷贝要替换的新内容;新内容拷完后,将原文件的读指针移动到要删除的内容之后,接着继续拷贝,直到文件结束。
关闭打开的两个文件,删除原文件,将临时文件更名为原文件名。
为什么要这么做呢?因为你修改的部分的文件块大小新旧可能不一致,不好操作。若是大小严格一致的,则可以用随机访问函数移动指针,直接写到原文件要修改的地方覆盖原数据却可。
Ⅲ 怎么用C语言对文件操作用特定内容替换其中某些内容
如果复只想修改文件一部分。可以制使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。文件指针的位置决定你读写文件的起始位置。其中参数origin :表示从哪里开始偏移,值有:SEEK_SET: 文件开头SEEK_CUR: 当前位置SEEK_END: 文件结尾参数offset:表示偏移的字节数,正数表示正向偏移,负数表示负向偏移。比如你先读取文件内容,同时做判断,找到你要改的内容时,调用函数fseek(fp,10L,SEEK_CUR);把文件指针移动到离当前指针位置10个字节的地方(我们假设当前位置偏移10个字节就是你要修改的起始位置);这样你之后的读写都是从这个位置开始。不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。所以最简单,还是直接生成新的文件替换原文件。
Ⅳ C语言如何 覆盖写入到文件最后一行
覆盖写入最后一行还是比较麻烦的。 因为判断最后一行的开始本身就不容易新写入的数据如果比原本行更少,使用读写方式还会出现空洞所以 最简单的方法就是把原本文件数据都读出来然后以只写的方式 重新打开,清空文件把之前的数据写入, 除了最后一行最后 再写入新数据。
Ⅳ c语言文件读写覆盖的问题
位置是共用的fscanf移动了rp的当前位置所以在fprintf(rp,"%d",j);之前要使用fseek(rp, 0, SEEK_SET);把位置移到前面
Ⅵ C语言修改一条信息然后重新写入文件,怎么覆盖原有的那条信息fwrite
fopen的第二个打开模式参数 用“w”
"w"
打开用于写入的空文件。 如果给定文件存在,则其内容会被销毁。
Ⅶ C++如何覆盖原文件并写入
目前的操作方法是:m_fpVideoFile=fopen(strFilePath,"wb+");fseek(m_fpVideoFile,尾部,SEEK_SET);fwrite(pchData,1,长度,m_fpVideoFile);fseek(m_fpVideoFile,中间的位置,SEEK_SET);fwrite(pchData2,1,xxx,m_fpVideoFile);fseek(m_fpVideoFile,0,SEEK_SET);fwrite(&m_FileHead,1,sizeof(FILE_HEAD),m_fpVideoFile);/////////////////////////////////这样能实现在不同的位置写,但是已经存在的文件就不能打开再添加了。
Ⅷ C语言怎么覆盖文件中的记录
ffulsh调用没有另外你的当前文件指针的位置指在哪里?你要在指定位置修改的话,那么你有没有使用feek去定位位置? 有一种比较笨的方法,就是fopen后,直接全部读取,然后fclose然后重新fopen,然后字符串重新全部写入
Ⅸ c语言如何做到把文本文件读取操作后覆盖原文件保存
先用r模式读取文件内容并保存在适当的数组中,fclose。你可以修改其中的数据,然后用w模式读取相同文件名,再写入数据。
Ⅹ 在C语言中,fopen一个文件 如何能够在写入新的数据覆盖原文件中指定长度的内容
程序示例
程序示例1#include#include //为了使用exit()int main(){char ch;FILE* fp;char fname[50]; //用于存放文件名printf("输入文件名:");scanf("%s",fname);fp=fopen(fname,"r"); //只供读取if(fp==NULL) //如果失败了{printf("错误!");exit(1); //中止程序}//getc()用于在打开文件中获取一个字符while((ch=getc(fp))!=EOF)putchar(ch);fclose(fp); //关闭文件return 0;}注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上!程序示例2[2]#includeFILE *stream, *stream2;int main( void ){int numclosed;// Open for read (will fail if file "crt_fopen.c" does not exist)if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996// Note: fopenis deprecated; consider usingfopen_sinsteadprintf( "The file 'crt_fopen.c' was notopened" );elseprintf( "The file 'crt_fopen.c' wasopened" );// Open for writeif( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996printf( "The file 'data2' was not opened" );elseprintf( "The file 'data2' was opened" );// Close stream if it is not NULLif( stream){if (fclose( stream ) ){printf( "The file 'crt_fopen.c' was not closed" );}}// All other files are closed:numclosed = _fcloseall( );printf( "Number of files closed by _fcloseall: %u", numclosed );}[3]
未经允许不得转载:山九号 » c覆盖文件内容|怎么用C语言对文件操作用特定内容替换其中某些内容