CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

问一个关于文件读写操作的问题

楼主seabird125(海鸥)2005-04-01 15:38:57 在 VB / 基础类 提问

我自定义了一个type  
  type  
        Name   as   string  
        Id   as   integer  
        Class   as   string  
  end   type  
   
    想把它写到一个文件中去,文件名自己定  
    比如,今天写了3,4个rec进去了。明天想删除其中一个,或者想增加两个.  
  后天想查询.  
    就是说想实现文件象数据库那样的操作,可以吗?  
   
    不想用数据库。...因为数据量不是很大,而且很容易出问题.就想用文件来解决  
  问题点数:0、回复次数:14Top

1 楼rainstormmaster(暴风雨 v2.0)回复于 2005-04-01 15:45:41 得分 0

可以考虑使用xml文件Top

2 楼qiqi5521()回复于 2005-04-01 15:47:56 得分 0

如果要实现删除操作,最快的方法是加入删除标记,而不是真的删除,而且每隔一段时间可以让用户选择优化一次文件。不然的话效率会很低。  
  type  
        Delete   as   boolean'删除标记,只有优化文件的时候才真正删除数据  
        Name   as   string  
        Id   as   integer  
        Class   as   string  
  end   type  
  Top

3 楼seabird125(海鸥)回复于 2005-04-01 15:48:46 得分 0

有例子吗?好象可以通过文件操作实现的Top

4 楼Gutta(冯大狂)回复于 2005-04-01 15:51:47 得分 0

当然可以了啊~~  
   
  思路是这样的,一般来说,对于记录形式的文件操作使用“随即访问模式”  
  Open   "C:\a.txt"   For   Random   As   #1   Len=Len(Typename)  
   
  对于写入:  
  Put   #文件号,[记录号],变量名  
  Put   #1,,Record1  
  上面一句省略记录号,则表示在当前记录后插入一条记录,常用于连续写入时。  
   
  对于读取操作:  
  Get   #文件号,[记录号],变量名  
  Get   #1,1,FirstRec  
  读取文件1的第一个记录到FirstRec中去  
  如果省略记录号,则表示读出当前记录后的一条记录,也用于连续读取。  
   
  对于查询操作:  
  一般来说,有两种方法,一种是查询法,一种是直接取得。  
  查询法很简单就是用一个循环比较ID:  
  Count=   Lof(1)/Len(Record)  
  For   i=1   to   Count    
      Get   #1,i,TmpRec  
      if   TmpRec=ID   Then   Exit   For  
  Next  
  if   i   =   Count   +   1   then  
      Msgbox   "NULL"  
  else  
      QueryRec   =   TmpRec  
  end   if  
   
  还有一种是直接取得法,更快捷,是利用记录大小和记录ID来直接求得记录起始地址。  
  Get   #1,QueryRec.ID,QueryRec  
  当然,前提是有一个递增的ID,就像ACCESS中的自动增长字段类型一样。  
   
  Top

5 楼Gutta(冯大狂)回复于 2005-04-01 15:53:35 得分 0

删除文件,不太好操作,qiqi5521()   的建议可以采纳Top

6 楼seabird125(海鸥)回复于 2005-04-01 15:56:07 得分 0

问题是如何产生这个自动增长的ID呢?  
  还有如何修改某条记录该怎么办呢Top

7 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2005-04-01 15:57:54 得分 0

同意   rainstormmaster(暴风雨   v2.0)   的思路Top

8 楼seabird125(海鸥)回复于 2005-04-01 16:03:22 得分 0

对某个记录号做标记也存在对记录的修改啊...  
  否则怎么做删除标记呢Top

9 楼qiqi5521()回复于 2005-04-01 16:22:06 得分 0

以二进制方式打开文件,则当你用put语句的时候,就是直接覆写当前文件指针处的数据。  
  比方说我要覆盖文件的第一个字节,put   #1,1,255  
  Top

10 楼seabird125(海鸥)回复于 2005-04-01 16:27:08 得分 0

可是直接在rec里面定位指针很困难吧.  
   
  不可能知道是哪一个字节的Top

11 楼qiqi5521()回复于 2005-04-01 16:45:28 得分 0

用LenB()函数可以得到结构的所占用的字节数。Top

12 楼qiqi5521()回复于 2005-04-01 16:48:27 得分 0

如果数据量不是很大,用   XML   或文本文件处理起来会更方便,也比较便于调试。毕竟现在不是Dos时代了,用文本文件虽然要多占一些硬盘空间,但与换来的开发效率比起来,是非常值得的。Top

13 楼Gutta(冯大狂)回复于 2005-04-01 16:48:55 得分 0

XML...  
   
  很不错的东东,可惜不会用.Top

14 楼suolong123(JJ掉了不过碗大个疤)回复于 2005-04-01 20:05:15 得分 0

XML我还没学呀!  
  下一期的课程!Top

相关问题

  • TXT文件读写操作
  • 文件的读写操作
  • 读写文件操作
  • 文件的读写操作?
  • help--文件的读写操作
  • 内存流读写文件的操作?
  • java对xml文件的读写操作!!!!
  • 文件读写操作,请教原码!!!
  • 求一对文件读写操作~~~~~?????
  • 关于 ini文件地读写操作

关键词

  • 文件
  • 查询
  • 数据
  • 记录
  • 删除
  • queryrec
  • 标记
  • 操作
  • 法
  • 问题

得分解答快速导航

  • 帖主:seabird125

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo