QQ群讲义1--关于用VB的文件操作

原创 2007年10月08日 21:30:00

这篇是在VB程序设计的QQ群里讲座的讲义,2007年3月11日的 

 

第一节:基础概念
 
文件者,计算机之本也,死生之道,信息存亡之地,故不可不查也。
 
咱们现在通常所说的文件指的是存在硬盘上的数据,即相对于内存所说的外存的形式之一(因为还有磁带,非常有幸,本人见过磁带),现在C语言系统中对于文件的处理采用的是流的概念,把文件看成是字符的集合,分为ASCII型和二进制两种,当然,计算机中的所有数据归根结底都是二进制形式存放的,但这个地方所说的ASCII型是进行了一次转换,成为一种中间方式。换句话说,二进制的方式就是在内存中使用时的方式,计算机看着顺眼;ASCII方式是进行了一次转换之后,咱们看着顺眼的方式,所以,什么时候采用什么方式也就很容易想到了。
 
另外,对于文件的处理,存在两种系统,缓冲与非缓冲方式,现在C语言系统采用的是缓冲的方式,就是系统自动为使用的文件开个区域,数据先存放到此处,待满员后送往硬盘,一般默认为512字节,在C语言中,这个数值是相对固定的,由编译器决定,和VB的有所不同。
 
插叙一段:随着历史的发展,很多专用的文件类型都有了专用的处理方式,最典型的就是数据库,对于数据库文件的操作,现在基本都是用中间件的方法进行操作,比如在VBASP中,从RDODAO,一直发展到现在流行的ADOADO.Net,在JSP中也有相关的数据组件,这些组件的主要功能就是封装了对于数据库文件格式的操作细节,用它们成功的实现了简便连接后,再用SQL的方式进行有关操作,因为SQL这种语言的运行方式比较特殊,有人称之为第四代编程语言,也就是直接告诉它干什么,而不需考虑如何实现,这和咱们现在看到的CVB确实有很大的不同,因为这种语言的高度简洁,所以ADO之类的技术大大减轻了我们的负担,当然,现在偶尔还会看到C语言操作FoxBase数据库之类的程序,那种还是先分析格式,然后一个个记录的去提取的。关于数据库操作的基本知识,由咱们的数据库一流高手168完成,今日到此为止,不再多说,今天主要要说的还是相对原始的和格式有关的操作。
 
到了VB中,引入了记录的概念(这个很可能是参考数据库得出的方法),既而有了顺序文件和随机文件的分别,顺序文件的访问方式是依次处理,随机文件则可以自己定位。
 
VB中的文件打开语句和C语言的极为相似,后续的参数决定了这个语句还可以创建新文件,而且在参数中还指定了有关锁定的控制,大大方便了有关的操作,另外,VB的文件打开语句中还有个关于长度的参数,用来指定记录长度或缓冲区大小,在这里,这个数值是可以指定的,当然,默认值和C语言中的一致。
 
 
第二节:基本应用
 
C语言中,每打开一个文件,创建的是一个文件类型的指针,到了VB当中,采用的是文件号的概念,123等,当然关闭的时候也用Close #1Close #2这样的方式关闭,于是,就有了一个很重要的函数FreeFile
 
参考1:多使用FreeFile取得文件号,而不是直接的123
参考2:文件操作语句的一个简单应用,实现168上次说到的第二套打印方案
这个方法的根据就是Html实则也是文本文件,并且,其中的Html有关标记也可以直接以文本方式输出,所以,直接把有关数据记录按文本方式输出,生成Html文件即可。
这段代码选自本人实际项目:
 
If Right$(App.Path, 1) <> "/" Then
    strFileName = App.Path & "/SYYSaveDocsWorkS/" & txtSSaveDoc.Text & ".htm"
   Else
    strFileName = App.Path & "SYYSaveDocsWorkS/" & txtSSaveDoc.Text & ".htm"
 End If
 
先通过这一段生成文件名strFileName,用App.path的最后一个字符是否为“/”来区分当前程序是否被放到了根目录(必须承认,世界上还是有变态的人的存在)
 
 iFlag = FreeFile()                         '生成一个当前未使用的文件标号
 Open strFileName For Output As #iFlag     '打开一个文件
 
Print #iFlag, "<Html>"                     
用上边这样的语句向文本文件中输入Html标记
 
以下用一个Do循环结构显示数据
Do While Not rsWorkS.EOF
   '显示数据部分********************
    Print #iFlag, "<TR>"
     '显示姓名
     Print #iFlag, "<TD>"
      Print #iFlag, rsWorkS("Name")
     Print #iFlag, "</TD>"
     '以下用类似语句显示其他数据,详见程序代码
     Print #iFlag, "</TR>"
    rsWorkS.MoveNext
   Loop
 
其中 Print #iFlag, rsWorkS("Name")  是向文件中输入数据库的内容
 
这样,就生成了一个html的文件,双击打开,调用IE进行打印。
 
参考3:一个简单的判断程序使用次数的通用过程
 
'判断是否到注册期限的通用过程
'intDeadLine可能返回值为0,1,2,3
'0表示判断文件不存在程序初次运行
'1表示已通过验证
'2表示程序已到限定使用次数
'3表示程序未到限定次数
 
Public Function intDeadLine(ByVal strRegFile As String) As Integer
 
 Dim intFlag As Integer          '临时文件号
 Dim intCount As Integer         '总使用次数
  Dim bolReg As Boolean           '声明是否已通过验证的变量
 
 intFlag = FreeFile()           '设置一文件号
 
  On Error Resume Next
 
  Open strRegFile For Random As #intFlag Len = 4
  
 If err.Number = 53 Then
    '若文件不存在,则创建文件并写入初始内容
   Put #intFlag, 1, False
    Put #intFlag, 2, 1
    Close #intFlag
    intDeadLine = 0
   Else
    '确认文件存在后,进行如下操作
    Get #intFlag, 1, bolReg '确定是否需验证
    Get #intFlag, 2, intCount   '程序运行次数
   
    If bolReg = True Then
      Close #intFlag
      intDeadLine = 1
     Else
      If intCount >= 5 Then   '决定使用次数
        Close #intFlag
        intDeadLine = 2
       Else
        intCount = intCount + 1
        Put #intFlag, 1, bolReg
        Put #intFlag, 2, intCount
        Close #intFlag
        intDeadLine = 3
      End If
    End If
 End If
End Function
 
参考4:操作ini文件
Ini文件是16位时代很常见的配置文件,但现在仍然有很多程序使用,用记事本就可以打开,但是它的操作想要用VB实现则不像想像中的那么容易,需要调用API函数;其实,好多配置信息自己写个文本文件,扩展名随意定制一个未尝不可,不过作为一个摆酷的方式,练练ini的使用也不错。
操作ini文件的API是如下两个:WritePrivateProfileString和GetPrivateProfileString,可以在API的文本浏览器或手册中找到,然后复制,一般为了方便起见,可以把读写操作作成两个通用过程
如下代码是写的过程:
Private Sub WriteToIni(ByVal Filename As String, ByVal Section As String, ByVal Key As String, ByVal Value As String)
  Dim buff As String * 128
  buff = Value + Chr(0)
  WritePrivateProfileString Section, Key, buff, Filename
End Sub
下边的代码是读的通用过程:
Private Function ReadFromIni(ByVal Filename As String,ByVal Section As String, ByVal Key As String) As String
  Dim i As Long
  Dim buff As String * 128
  GetPrivateProfileString Section, Key, "", buff, 128,Filename,
  i = InStr(buff, Chr(0))
  ReadFromIni = Trim(Left(buff, i - 1))
End Function
 
写INI文件的过程
Dim Counter As Long
For Counter=1 To 4
  Call WriteToIni(App.Path & "/Options.ini", "Test", "Name" & Counter, "Value" & Counter)
Next Counter
生成的Options.ini内容如下:
[Test]
Name1=Value1
Name2=Value2
Name3=Value3
Name4=Value4
 
读INI文件
Dim Counter As Long
Dim Value(4) As String
For Counter=1 To 4
  Value(Counter-1)=ReadFromIni(App.Path & "/Options.ini", "Test", "Name" & Counter)
Next Counter
 
参考4:资源文件的使用
各位使用VB的弟兄可能都遇到过多个图片需要组织在一起的问题,解决这个问题的一个方案就是资源文件。
 所谓资源文件,就是指将在程序运行时用到的资源集中在一起的一个文件。一个资源文件可以包括文字(TEXT),位图(BITMAP),图标(ICON)等,并且在程序中调用时可以不指明路径,这就简化了程序的编写并减少了发生错误的可能,在汇编和C的SDK写Windows程序时,资源文件的使用几乎成为家常便饭,但VB有时也会用到,故在此提及。
现在,某工程运行后,要求点击【未来】按钮时中间图像将依次变换为夏、秋、冬、春……点击【从前】按钮则以相反顺序转动图片。
   首先建立春、夏、秋、冬四幅位图,均以.BMP格式保存在C:/TEST/下。然后打开记事本或其它文本编辑器编写资源文件,
内容如下:
100 bitmap spring.bmp
200 bitmap summer.bmp
300 bitmap autumn.bmp
400 bitmap winter.bmp
其中数字表示此项的ID号码,此号码很重要,它是调用的标记,BITMAP表示以位图方式保存,最后的部分是实际的文件名,将此文件保存为TEST.RC。
然后要编译资源文件,在C:/Visual Basic/Wizards目录下可以找到RC.EXE文件(有时找不到,到安装盘上看看),在命令行方式到刚才保存那个rc文件的目录,然后rc /r test.rc(键入rc /?会显示帮助),在编译成功后在C:/TEST/中发现增加了一个名为TEST.RES的文件(这才是可以添加到程序中的真正的资源文件)。
   完成了上面的工作,接下来就可以编写工程了。首先建立一个Image控件img和两个Command控件cmdc、cmdw。然后建立一个时钟控件,设其Interval属性为1000。最后在[通用]中声明一个名为iid的整形变量:
Dim iid As Integer
并初始化img和iid:
img.Picture=LoadResPicture(100,vbResBitmap)
iid=100
其中LoadResPicture(id,model)为从资源文件中调用图片的函数,100表示ID号为100的项,vbResBitmap为一常量,值为0,表示以位图方式打开。然后在两个Command控件中加入源程序代码。
最后在工程资源管理器中用鼠标右键单击选择     添加-->添加文件,加入TEST.RES。
按F5运行一下试试效果
 
完整源程序如下:
Option Explicit
Dim iid As Integer
Private Sub comc_Click()
    iid = iid - 100
    If iid < 100 Then iid = 400
       img.Picture = LoadRespicture(iid.vbResBitmap)
    End If
End Sub
Private Sub comw_Click()
    iid = 100 + iid
    If iid > 400 Then iid = 100
       img.Picture = LoadResPicture(iid,vbResBitmap)
    End If
End Sub
Private Sub Form_Load()
    img.Picture = LoadResPicture(10O,vbResBitmap)
    iid = 100
End Sub
Private Sub Timer1_Timer()
    iid = 100 + iid
    If iid > 400 Then iid = 100
       img.Picture = LoadResPicture(iid,vbResBitmap)
    End If
End Sub 

vb 获取QQ群所有QQ号

  • 2011年05月15日 12:01
  • 12KB
  • 下载

QQ群聊天记录分析器

前几天闲来无聊,想清理一下自己建的一个QQ群。有些人长期不发言,着实无奈。突然想起来QQ导出的聊天记录有一定的格式,就试着用JAVA写了个小程序去分析。没想到几行代码就搞定了。 分析出来的效果和...
  • LeadWorld
  • LeadWorld
  • 2006-05-31 21:24:00
  • 2483

获取QQ群用户列表

frmMain VERSION 5.00Begin VB.Form frmMain    Caption         =   "Form1"   ClientHeight    =   3090 ...
  • chenhui530
  • chenhui530
  • 2007-12-20 19:44:00
  • 4628

vb获取QQ群所有QQ号

  • 2012年02月27日 09:31
  • 12KB
  • 下载

Python操作泄露的QQ群数据库

之前没有一点儿操作数据库的实际经验,python也没有实现过完整的程序。几乎是走一步搜一步,学到的倒也挺多,对数据库没有那么陌生了。遇到的最大问题却是编码问题……...
  • efeics
  • efeics
  • 2013-11-28 22:49:29
  • 10966

Unity3D技术交流(AR/VR)群(334163814)成立~专注AR/VR技术交流

Unity3D技术交流(AR/VR)群(334163814)成立~专注AR/VR技术交流
  • asd237241291
  • asd237241291
  • 2014-09-04 10:38:30
  • 2991

QQ消息轰炸机源代码(VB.NET)

***************************************QQ消息轰炸机源代码(VB.NET)wgscd 2005-1-1 ****************************...
  • whale_chen
  • whale_chen
  • 2005-08-24 10:43:00
  • 1788

计算语言学讲义中科院 刘群

  • 2009年04月08日 18:55
  • 1.48MB
  • 下载

腾讯加入QQ群 连接代码

  • jianhuili
  • jianhuili
  • 2012-08-16 11:32:27
  • 3945

《计算语言学》讲义-中科院 刘群教授

  • 2013年11月21日 23:19
  • 9.39MB
  • 下载
收藏助手
不良信息举报
您举报文章:QQ群讲义1--关于用VB的文件操作
举报原因:
原因补充:

(最多只允许输入30个字)