文件分块写入,分块读取。

icesnowjank 2008-01-08 07:15:41
CFile _fp(_T(a.txt),CFile::modeCreate | CFile::modeWrite);
DWORD dwNewLength = 10000;
_fp.SetLength(dwNewLength);
现在就是创建了一个大小为10000的文件,现在是要把这个文件分10块,然后写文件的时候是 分块写 比如 char buf1[ 500 ]的数据 第一块占用不完的地方空着,char buf2[ 2100 ]; buf2要占用2块多一点
现在问题的关键是 怎么去分这个块?
请高手指点迷津··
...全文
455 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
casinosun 2008-01-09
  • 打赏
  • 举报
回复
假如用开始200个字节(或更多视文件情况而定)放块首地址,真正的从201开始
jilei1983 2008-01-09
  • 打赏
  • 举报
回复
上面都说了 指针可以轻松搞定
jwybobo2007 2008-01-09
  • 打赏
  • 举报
回复
通过文件指针在读取的时候,按读的大小定位指针,然后继续读
youyifang 2008-01-09
  • 打赏
  • 举报
回复

UINT nRead = 0;
while (nRead < nFileSize)
{
char buffer[1024] = "";
UINT nCur = fread(buffer, 1, sizeof(buffer), sourceFp);
if(nCur == 0)
{
break;
}

if(fwrite(buffer, 1, nCur, fp) != nCur)
{
fclose(sourceFp);
PRINT_ERROR;
return false;
}

nRead += nCur;
}


分块读和分块写没有什么的,如果你不做特殊处理的话,就按正常读写,只是每次读入一定大小的数据就是按块读了,写的过程一样,上面的例子式按照1024b 块大小读写的。
icesnowjank 2008-01-09
  • 打赏
  • 举报
回复
文件分块 写入和读取。。 把一个大文件可能有1G 分成若干块比如 512k 有一系列vector要写入文件,规则是 比如 vector<int> v; v的大小比固定,如果超出一个文件块(512k)就往后找一个空的文件块继续写入,如果小于就直接写入,读取也是一样,把v写入的数据(可能不连续)分别读取出来。PS: 写入的过程中,如果一个文件块写不完下次就继续在这个文件块的‘结尾’出写。 问要怎么设计这个问题的数据结构。
oldmanzhao 2008-01-09
  • 打赏
  • 举报
回复
小于1000的按1000写,大于1000的凑个整数按1000写,比如char[500],就写char [1000],char[2100],就写三个char[1000],可以用memcpy把char[500]的数据复制到char[1000]里,再如法炮制char[2100];
jhs1982419 2008-01-08
  • 打赏
  • 举报
回复
用指针操作就可以实现的。
jameshooo 2008-01-08
  • 打赏
  • 举报
回复
先把文件按照10000分配好,里面的数据可以都是空的,然后根据文件指针来定位你自己需要的块进行写操作。
嵌云阁主 2008-01-08
  • 打赏
  • 举报
回复
在文件头或者文件尾加上块信息

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧