| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1150 人关注过本帖
标题:关于删除文件部分内容和测试文件大小
取消只看楼主 加入收藏
凌彬严
Rank: 1
等 级:新手上路
帖 子:38
专家分:1
注 册:2009-7-13
结帖率:100%
收藏
 问题点数:0 回复次数:0 
关于删除文件部分内容和测试文件大小
//filesize.c
#include <stdio.h>
unsigned int filesize(FILE * stream)//返回文件大小
{
if(fseek(stream,0L,SEEK_END))
{
    printf("文件指定移动至尾部失败,返回文件大小失败!\n");
    getch();
    return NULL;
}
else
    return ftell(stream);
}

//filepardel.c
#include <stdio.h>
#include <stdlib.h>
void *filepardel(char * const filename,FILE *p,unsigned int start,unsigned int len)
{
    void *mstar,*mpastar,*mcpystar;
    unsigned int size=filesize(p),cpysize,newsize;
if(p==NULL || size==NULL || len>size || len>(size-start))//映射条件不足
    {
        printf("文件为空或流为空或文件没有足够内容可删除,删除失败!\n");
        return NULL;
    }
else
    {//开始操作
        printf("删除位置距文件开始处:%u,大小为:%u\n",start,len);

        if(!(mstar=malloc(size)))//申请内存
        {
            printf("申请内存失败!\n");
            return NULL;
        }
        printf("申请的内存大小为%u\n",size);
        printf("申请的内存起始地址为%u\n",mstar);
        
        rewind(p);
        if(!(fread(mstar,size,1,p)))//映射文件
        {

            printf("映射文件失败!\n");
            free(mstar);
            return NULL;
        }

        //覆盖内存中需删除段
        mpastar=(unsigned char*)mstar+start;
        mcpystar=(unsigned char*)mstar+start+len;
        cpysize=size-start-len;
        memmove(mpastar,mcpystar,cpysize);

        printf("粘贴的内存起始地址为%u\n",mpastar);
        printf("复制内存起始地址为%u\n",mcpystar);
        printf("复制内存块大小为%u\n",cpysize);


        //重新定义映射内存段,释放尾段相当于删除部分大小内存
        newsize=size-len;
        if(newsize>0)
            if((mstar=realloc(mstar,newsize))==NULL)
            {
                printf("重置内存大小失败!\n");
                return NULL;
            }
        //先关闭再空置方式打开操作目标文件,内存映射复制回文件
        //有没有办法不关闭文件清空文件所有内容????
        if(fclose(p)!=0)//
        {
            printf("文件关闭失败!\n");
            return NULL;
        }
        if((p=fopen(filename,"w+b"))==NULL)
        {
            printf("文件打开失败!\n");
            return NULL;
        }
        fwrite(mstar,newsize,1,p);

        //释放映射内存
        free(mstar);   
        return p;
    }//操作结束
getch();
}




有没有办法不关闭文件清空文件内容的办法(保持文件指针始终指向目标操作文件)?
搜索更多相关主题的帖子: 文件 删除 
2009-09-20 17:40
快速回复:关于删除文件部分内容和测试文件大小
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026372 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved