文件路径保存问题

IORI915189 2009-04-29 07:16:39
一个小工具 需要把遍历得到的全盘文件 保存起来 文件比较多(15万左右 ) 路径也比较长
放在一维数组里 File_Name()
有什么好一点的方法 兼顾速度和稳定性的 请做过的朋友提供一下思路 谢谢
回复的朋友都有分哦 欢迎大家回帖
...全文
199 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
IORI915189 2009-05-03
  • 打赏
  • 举报
回复
恩 花了好几个晚上 终于把存储的数组算法优化好了 信息量减少为原来的4/1


还是得自己动手。。。

结帖了 谢谢大家的建议。 呵呵
ygbh9999 2009-04-30
  • 打赏
  • 举报
回复
"最大程度的简化存储的信息量"
可以参考13楼的,不过最好改进一下,目录名有点冗余

XML觉得不太适合你的需要:
个人感觉XML就是一种数据库,优点是可以系统无关、跨平台使用、容易扩展
缺点是不够紧凑、速度不够快、安全性差
优点你一个也用不上,缺点我看都是你忌讳的,呵呵

所以还是坚持建议用Access

Tiger_Zhao 2009-04-30
  • 打赏
  • 举报
回复
倒数第3行的 C:\WINDOWS\ 是不消息多粘贴的,不要。
Tiger_Zhao 2009-04-30
  • 打赏
  • 举报
回复
其实楼主的目的要将文件列表序列化,并在序列化的数据较小,可以这样
[code=INIFile]C:\
AUTOEXEC.BAT
boot.ini
CONFIG.SYS
IO.SYS
MSDOS.SYS
NTDETECT.COM
C:\Documents and Settings\
C:\Documents and Settings\All Users\
C:\Documents and Settings\All Users\桌面\
Adobe Reader 8.lnk
C:\WINDOWS\
notepad.exe
C:\WINDOWS\
C:\WINDOWS\system32\
wupdmgr.exe[/code]
就是目录用 \ 结尾,该目录下的文件名紧跟在下面(不需要路径了)。
m60a1 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjl1031 的回复:]
为什么要放在数组里面?
如果想存取速度快的话,就不能放在数组里面,建议放在富文本框控件里面(RichTextBox),以回车换行,每行放一个。
[/Quote]

真的会比放在数组里面快吗??? 我持保留意见!!
我的感觉是,如果在操作数据里面,不管怎么操作,直接操作已存在于内存中的数据,肯定比任何一种方法更快,至于15万数据
怎么存法??LZ你可以存在数组里面?还是1维的??
东方之珠 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Chen8013 的回复:]
引用 1 楼 chenjl1031 的回复:
为什么要放在数组里面?
如果想存取速度快的话,就不能放在数组里面,建议放在富文本框控件里面(RichTextBox),以回车换行,每行放一个。

在富文本框控件里比字符串数组快?
应该不会吧~~~~~~~

取数据方便吗?
[/Quote]

取数据当然方便,RichTextBox有个filename属性:
RichTextBox.filename="c:\filenamelist.txt"
一行代码解决!
东方之珠 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ygbh9999 的回复:]
其实我认为LZ的要求描述得不够清楚!
如果你真是有“大量”文件需要检索的话
最好用Access数据库,表建得好的话,文件不算大、基本满足“高效的把它存到硬盘文件里”,利用索引,检索速度非常快
而用文本方式顺序存储虽然存储文件应该更小点,但检索起来慢得多,除非自己另外编写排序、插入、索引代码----累!
何况还得把这些数据全部读进内存-----浪费资源

但是LZ又说要“随时把它还原加载回字符串数组里”。。。。…
[/Quote]

这个方法好啊,支持!
东方之珠 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 m60a1 的回复:]
引用 1 楼 chenjl1031 的回复:
为什么要放在数组里面?
如果想存取速度快的话,就不能放在数组里面,建议放在富文本框控件里面(RichTextBox),以回车换行,每行放一个。


真的会比放在数组里面快吗??? 我持保留意见!!
我的感觉是,如果在操作数据里面,不管怎么操作,直接操作已存在于内存中的数据,肯定比任何一种方法更快,至于15万数据
怎么存法??LZ你可以存在数组里面?还是1维的??
[/Quote]

1、存数据肯定会慢一点,但也慢不了多少,15万也不算多。还有,控件里的数据也是在内存里,操作的也是内存,只不过控件是个封装起来的复杂对象,而数组相对来说要简单些,只是一种数据类型而已。
2、但是,取数据快。考虑问题总是综合考虑,而不是只考虑一方面!
IORI915189 2009-04-30
  • 打赏
  • 举报
回复
看了大家的回复 的确 自己也觉得是我没说清楚......

现在来直接一点 目前的想法是
命令行下的 TREE 相信大家应该用过 在 C盘根目录下 TREE /F
也就是最大程度的简化存储的信息量

每个分区的文件存放在一个多维数组里 每个多维数组格式就像目录树一样 存储的时候也按这种格式存储
这样 可以节省出很多资源 但是算法好象很复杂....

然后 信息想存到XML文件里 不知道XML能不能支持50M左右的文件存取?
ygbh9999 2009-04-30
  • 打赏
  • 举报
回复
其实我认为LZ的要求描述得不够清楚!
如果你真是有“大量”文件需要检索的话
最好用Access数据库,表建得好的话,文件不算大、基本满足“高效的把它存到硬盘文件里”,利用索引,检索速度非常快
而用文本方式顺序存储虽然存储文件应该更小点,但检索起来慢得多,除非自己另外编写排序、插入、索引代码----累!
何况还得把这些数据全部读进内存-----浪费资源

但是LZ又说要“随时把它还原加载回字符串数组里”。。。。
你把一大堆文件名读进内存有什么必要吗?如果真有这个需要,在数组数据结构设计上可能要着重构思一下

如果LZ的编程意图写得再明确些,相信有更多高手会给出很好的建议,而不是象我们这里根据自己的理解来“乱”支招了,呵呵
嗷嗷叫的老马 2009-04-30
  • 打赏
  • 举报
回复
文本在50M以下时,速度还是比较理想的.

你的文件列表不可能有这么大吧~~~~~~所以就用这种简单方案算了....
嗷嗷叫的老马 2009-04-30
  • 打赏
  • 举报
回复
由于VB的数组是安全数组,有描述符,所以保存与载入就相对简单了:

'保存

public function SaveList(byval FileName as string)
dim I as long

open filename for binary as #1
i=ubound(YourList)
put #1,,i '用I是为了保证4字节
put #1,,yourlist()
close #1
end function

'载入
public function LoadList(byval FileName as string)
dim I as long

open filename for binary as #2
get #2,,i
if i>=0 then
redim yourlist(i)
get #2,,yourlist()
else
msgbox "Err"
endif
close #2
end function

大约就是这样了......
IORI915189 2009-04-30
  • 打赏
  • 举报
回复
恩恩 俺也觉得 似乎是字符串数组比控件快。。

原始文件路径都存在File_Name() 这个一维字符串数组里了

现在的问题是 以什么格式能高效的把它存到硬盘文件里 并根据需要 随时把它还原加载回字符串数组里
舉杯邀明月 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chenjl1031 的回复:]
为什么要放在数组里面?
如果想存取速度快的话,就不能放在数组里面,建议放在富文本框控件里面(RichTextBox),以回车换行,每行放一个。
[/Quote]
在富文本框控件里比字符串数组快?
应该不会吧~~~~~~~

取数据方便吗?
xbin_2009 2009-04-29
  • 打赏
  • 举报
回复
不知道经Access数据库存取,会不会快些?
yinweihong 2009-04-29
  • 打赏
  • 举报
回复
嗯,同老马的递归
IORI915189 2009-04-29
  • 打赏
  • 举报
回复
存放在控件中比数组还快?恩 回家试下速度。哦,上面我可能没说清楚 想要保存后的文件尽量小 (因为同一路径下可能有多个文件) 保存速度尽量快 占用的内存尽量小 像目录树那样 代码可以多写两行 但占用的空间要尽量小 不知道拿xml文件保存有没有可能?
嗷嗷叫的老马 2009-04-29
  • 打赏
  • 举报
回复
稳定性,应该没啥不稳定的吧,只是保存字符串而已.

至于速度,应该与具体硬盘有关,一般民用硬盘不会有太大突破.

就简单的递归即可.....
SYSSZ 2009-04-29
  • 打赏
  • 举报
回复
放在多个文本文件中,比如每个放10000文件,将这15个文件名放入数组,调用时按编号调用,这样可以大大减少资源的占用
东方之珠 2009-04-29
  • 打赏
  • 举报
回复
为什么要放在数组里面?
如果想存取速度快的话,就不能放在数组里面,建议放在富文本框控件里面(RichTextBox),以回车换行,每行放一个。

1,486

社区成员

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

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