如何使用WriteFile将数据写到文件末尾

如何使用WriteFile将数据写到文件末尾,第1张

方法1:用append模式打开文件,然后写入数据

方法2:用读写模式打开,使文件指针移动到文件末尾,然后写入数据

方法3:用读模式打开文件,用写和建立模式打开新文件,读取原文件内容,写入新文件,再将新文件中追加写入新的数据,将原文件改名为备份文件名,将新文件改名为原文件名

因为 f_in.read(temp, sizeof(temp))这句读的大小为temp的长度10,可能造成了后面的七个空格,因为实际字符串的长度,比如你这里是abc应该是长度len=3,那么temp后面七个位置都是'\0', 最后读出来就是空格,所以你读的时候可以将 f_in.read(temp, sizeof(temp))改成 f_in.read(temp,len)

话,

有一个笨办法,那就是将文档从头到尾读一遍,记下换行符

的个数,就是它的行数(如果换行符不是最后一个话,

需要加1)。

代码如下:

//求指定文件的行数

int line_count(char* path)

{

FILE *f=fopen(path,"r")

int count=0//行数计数器

char c

int flag//标志

for(flag=fscanf(f,"%c",&c)flag!=EOF &&flag>0flag=fscanf(f,"%c",&c))

{

if(c=='\n')count++

}

if(c!='\n')count++

fclose(f)

return count

}

对于这个问题,你可以采用逐个读取字符,

空格之前的字符写入文件1,换行符之前的字符写入文件2,

这样自然也就将它分成了你要求的两个文档

代码如下:

//将文件path中的内容分为两部分,分别存入outFile1,outFile2,并返回文件path的行数

int split(char* path, char* outFile1,char* outFile2)

{

FILE *r=fopen(path,"r")//输入文件

FILE *w1=fopen(outFile1,"w")//输出文件1

FILE *w2=fopen(outFile2,"w")//输出文件2

if(r==NULL || w1==NULL || w2==NULL)

{

//打开文件失败,可以添加其它错误处理

return -1

}

int eof//用于指示是否已经到达文件末尾

char c//读入的字符

bool b=true//b为true时,写入输出文件1,否则写入输出文件2

int count=0//文件行数

for(eof=fscanf(r,"%c",&c)eof!=EOF &&eof>0eof=fscanf(r,"%c",&c))

{

switch(c)

{

case ' '://碰到换行符

b=false

fprintf(w1,"\n")

break

case '\n'://碰到换行符

b=true

fprintf(w2,"\n")

count++//行数加1

break

case '\r'://该字符总与\n成对出现,忽略

break

default:

if(b==true)

fprintf(w1,"%c",c)

else

fprintf(w2,"%c",c)

break

}

}

if(c!='\n')count++//最后一个字符不是换行符,应将行数加1

fclose(w1)

fclose(w2)

fclose(r)

return count

}

调用方式为:

int lineCount=split("C:\\a.txt","C:\\a1.txt","C:\\a2.txt")

祝你好运!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11644021.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存