文件處理高手高高手請進﹗﹗﹗

thorkhan 2002-04-09 08:56:06
那位朋友知道Outlook Express中資料存儲文件*.dbx的文件格式﹐文件屬于Binay類型﹐文件有標頭信息及數据信息兩部分組成﹐据我分析標頭信息應該由郵件紀錄索引﹐改郵件紀錄的啟始位置及郵件紀錄的長度組成﹐數据信息則是紀錄每個郵件的原始碼﹐我的問題如下﹕
1﹑如何用VB導出*.dbx文件中所存儲的所有郵件信息
2﹑用VB實現這樣的文件存儲應該怎樣作﹐我在自己的程序中已經實現了添加各种不同類型的文件(例如Bmp﹑Txt﹑Wav)到一個文件中﹐導出也實現了﹐但是如果在整合文件中讀出紀錄信息刪除其中一個文件怎樣作才能做到速度很快﹐例如可能我的文件有100MB大小﹐其中包含了几百個文件的信息﹐如果我說的不明白﹐各位可以親自操作一下Outlook Express﹐當他的郵件資料夾(*.dbx)文件達到几十MB時刪除其中一個郵件速度還是很快﹐還有整理碎片的功能﹐﹐這涉及到文件存儲格式的設計优化
請各位高手不吝賜教

...全文
30 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
thorkhan 2002-04-11
  • 打赏
  • 举报
回复
嚴重感謝樓上的网友的幫助﹗﹗﹗﹗﹗﹗﹗﹗﹗﹗
KiteGirl 2002-04-10
  • 打赏
  • 举报
回复
用数组也可以代替文件,在内存中进行。ReDim的Pr?????(抱歉,没记住)的关键字就可以实现类似文件追加的效果。
thorkhan 2002-04-10
  • 打赏
  • 举报
回复
To kitegirl(小仙妹):
妳說的方法贊同﹐我以前也是這樣作的﹐不過我看Outlook Express在實現刪除時他沒有產生臨時文件﹐我始終想不明白﹐﹐所以才問的﹐還有別的方法嗎﹖
liuzhanwen 2002-04-10
  • 打赏
  • 举报
回复
关注!
turbochen 2002-04-10
  • 打赏
  • 举报
回复
高手来了:
请到 http://www.wotsit.org/搜一下dbx文件格式,有一个人用c++写了一个读dbx文件的程序,有原马, 我想你可以很容易的将它翻译成vb.
thorkhan 2002-04-10
  • 打赏
  • 举报
回复
繼續等待
thorkhan 2002-04-10
  • 打赏
  • 举报
回复
怎么每人來﹖
KiteGirl 2002-04-10
  • 打赏
  • 举报
回复
关于第一个问题:你必须知道OE的DBX文件的详细结构,问题也就在这里。如果你知道DBX文件的构造,用Type语句就可以定义与之匹配的数据类型,接着就可以很轻松地用Binary方式操作了。

  关于第二个问题:实际上这是自行编写数据文件的添加删除问题,有个解决办法。把你要修改位置之前的数据一次性读出写到另一个文件(临时文件),然后对你要操作的记录进行删除或添加,然后写到临时文件里(如果是添加)。接着将当前操作部分后面的记录一次性读出写到临时文件,完成添加或删除操作。只要三次Out和Put语句就可以完成,需要一个Byte数组来读写。这种办法的速度是最快的。但是前提是:你必须知道记录的长度并且知道它的位置。

具体流程如下:

  从文件第一字节到记录开始地址(记录号码乘记录字节长度加数据区偏移量)减一这一段是前部数据[PD]。
  从记录开始(方法同前面)到记录结束(以LenB函数取记录变量得到)是你操作的位置[SD]。
  从记录结束加一字节到文件结尾(LOF取得)的部分是后部数据[BD]

  读PD写到临时文件[TF]
  进行增加删除操作:
    插入记录—先存SD到TF,然后存新的记录。
    删除记录—不做任何操作,直接进行后面的保存BD的动作。
    更改记录—修改SD,然后存到TF。
  保存BD到TF。
  关闭文件(千万别忘记啊!否则出错)
  [将被操作文件改名为一个随机文件号,作为备份文件(可以实现Ctrl+Z多次撤消功能)]
  [将TF改名为被操作文件]
thorkhan 2002-04-10
  • 打赏
  • 举报
回复
第二個問題已結﹐感謝 progame(来来往往,不知所云.......) kitegirl(小仙妹)﹐等結貼時會給你們分的﹐再次謝謝
不過還有第一個問題誰能告訴我??????????????????????????
微軟的技術人員在哪里????????????????
progame 2002-04-10
  • 打赏
  • 举报
回复
转移后它的In.box不会变小的,你可以使用记事本什么的打开看看
thorkhan 2002-04-10
  • 打赏
  • 举报
回复
To progame(来来往往,不知所云.......)
Foxmail在刪除郵件是把文件轉存到Trash.box﹐但也不是象妳所說的作刪除標記
progame 2002-04-10
  • 打赏
  • 举报
回复
像FoxMail一样的邮件存储在删除只是标记一下邮件头就行了

最后压缩邮箱的时候才处理删除的,所以速度会快

增加的时候也只是追加到文件末尾,所以不必使用临时文件的

OutLook从来不用的,不清楚
dyugao 2002-04-09
  • 打赏
  • 举报
回复
帮忙up
water_j 2002-04-09
  • 打赏
  • 举报
回复
gz!
thorkhan 2002-04-09
  • 打赏
  • 举报
回复
有筆誤Binay應為Binary

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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