C语言关于文件的一点问题:(如何把文件件的末尾删掉?)

Meuck 2003-05-15 12:33:15
在TurboC中把文件件的末尾删掉.
找了我一个晚上还是不行啊.大家帮帮
...全文
66 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hongyanzaiyun 2003-05-18

我想应该要把最后十个字符一个一个删掉把
然后再保存

可惜我的上边没有.dot(因为我的操作系统没激活,所以过几天要删了)
没法试
但我认为这种方法应该是对的把
回复
etboy327 2003-05-18
fseek应该是好办法。
用fprintf(fp + offset, "末尾", "");是不是也行?
回复
Meuck 2003-05-18
stukov2002(>_<) 办法可以,之后我在用filelength函数的时候发现的.在io.h里

另外Jupin(VxWorking) 的程序要另外建一个临时文件,不符合我的要求
回复
Meuck 2003-05-18
to: hongyanzaiyun(鸿雁在云)
不行啊,以下是我的代码
FILE *fp;int a;
if((fp=fopen(filename,"rb+"))==NULL){printf("Error test1");return;}
//fseek(fp,9,0);
fseek (fp,-10L,SEEK_END);
fputc(0,fp);
//fprintf(fp,"a");
fclose(fp);
只是在中间加了一个ASCII码为0的字符而已

回复
用chsize(int handle, long size)函数截断文件就行了.用法看帮助.
回复
Jupin 2003-05-18
/* 经过上机调试 */
/* 环境:Dev C++ 4.9.8.0 + Windows 2000 Pro */
#include <stdio.h>
#include <stdlib.h>

/* 删文件尾部,c参数为要删除的位数 */
void cutfiletail(FILE *fp, FILE *fpn, int c)
{
fpos_t pos, i;
char data;

fseek(fp, 0, 2);
fgetpos(fp, &pos);
pos -= c * sizeof(char);
fsetpos(fp, &pos);
fseek(fp, 0, 0);
fgetpos(fpn, &i);
while (pos--)
{
fread(&data, sizeof(char), 1, fp);
fwrite(&data, sizeof(char), 1, fpn);
fgetpos(fp, &i);
}
}

main(void)
{
FILE *fp, *fpn;
char data;
if ((fp = fopen("change.data", "r+b")) == NULL)
{
printf("The file cannot open!\n");
return;
}
if ((fpn = fopen("temp.data", "w")) == NULL)
{
printf("The file cannot open!\n");
fclose(fp);
return;
}
printf("Now will enter the cutfiletail function!\n");
cutfiletail(fp, fpn, 4);
fclose(fp);
fclose(fpn);
system("copy temp.data change.data");
system("del temp.data");
system("pause");
}

试试看吧。
回复
hongyanzaiyun 2003-05-17
用fseek 啊?
fseek (fp,-10L,SEEK_END); //fp是文件指针,-10L表示从文件末尾后退10个字节
然后将后边字符置为0,在保存就可以了
回复
shishiXP 2003-05-15
好像只有这个办法
回复
Meuck 2003-05-15
我原来想到的也是这个办法啊。^_^
还望大家积极发言.
回复
ghtsao 2003-05-15
笨笨的办法就是重新复制文件,末尾不要。直接去掉尾部怕是有点难哦。
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2003-05-15 12:33
社区公告
暂无公告