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 

腾讯qq群推广“一键加群”的一个细节

刚才我们的新版产品要上线了,需要改一个“一键加群”的链接,我第一次使用这个功能,所以才被一个细节坑了,如下操作: 然后跳转到一个页面,”网页代码“地址类似: 时间仓促,复制了idkey...
  • sinat_22599079
  • sinat_22599079
  • 2014年12月26日 18:52
  • 2221

临终须知1--来自qq群

墨玉夜翔(吴侃)  11:07:53 临终须知  妙真法师监定   释世了敬述 自序   世间最悲哀痛苦的事莫过于死亡。对于死亡,没有一人不知道,也没有一人可能免。若是只知道死亡是悲哀痛苦,...
  • liuqiaoying_lqy
  • liuqiaoying_lqy
  • 2014年03月13日 11:22
  • 879

如何使用QQ群日历和群活动进行会议室安排

iamlaosong文 公司的会议室各个部门共同使用,难免会有冲突,所以最后是报综合部统一安排,然后在群里面发通知。但是这些通知不太好查,所以最好的办法是在群日历中展示,只要点击指定的日期,当日的安排...
  • iamlaosong
  • iamlaosong
  • 2017年05月04日 10:53
  • 1148

不加群就可以提取QQ群成员

做网络营销的人,肯定会对这个标题感兴趣,哈哈,今天来说说所谓的“不加群就可以提前QQ群成员”是咋回事。。。 如今大多数QQ群都是拒绝陌生人加入的,需要身份验证,要想在不加入群的情况下知道里面有哪些成...
  • avsuper
  • avsuper
  • 2013年04月17日 14:48
  • 18634

腾讯QQ群关系数据被泄露了?

目录: 基本介绍 漏洞截图 迅雷下载截图 百度云下载截图         这年头,用户资料都可以论斤卖了,无论是快递单上的用户信息,还是酒店的开房记录,还是网站的登陆...
  • u012458817
  • u012458817
  • 2013年11月19日 19:33
  • 1874

按QQ查询QQ群数据库的方法

用存储过程搜寻QQ号加入哪里QQ群。
  • sbdx
  • sbdx
  • 2016年09月18日 00:16
  • 7517

android 一键添加QQ群 的实现步骤

1.浏览器访问QQ群网页  http://qun.qq.com/join.html 2.登陆自己的账户 3.复制android代码: /* * 发起添加群流程。群号:洛阳智慧安监(**...
  • shangxinlei88
  • shangxinlei88
  • 2015年04月13日 17:45
  • 4081

奇怪的群名片

今天在某QQ群看到一个有趣的现象,! 就是我@了这个人以后无论我怎么弄,只要我在后面说话,内容就会跑到引号里面去。这不禁让我大吃一惊。有种找到了QQ漏洞的感觉,似乎分析一下可以从里面做文章...
  • bluestar628
  • bluestar628
  • 2017年08月09日 15:44
  • 661

【C语言疯狂讲义】(十六)C语言文件操作

1、文件的基本概念         存储外部介质上得数据集,数据集有一个名称就是文件名          文件的分类:           1)用户角度:普通文件和...
  • liwei3gjob
  • liwei3gjob
  • 2014年12月02日 22:48
  • 1485

CSDN博客QQ加群、微信

对于QQ加群我一直是拒绝的,不是自己摆姿态,而是实在没有这样的影响力和能力。然而今日一朋友的话改变了我这种想法,所以尝试在CSDN博客首页上添加QQ加群功能,此博客也就权当一个记录(主要是为了上传一张...
  • qing_gee
  • qing_gee
  • 2015年12月18日 14:49
  • 2255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QQ群讲义1--关于用VB的文件操作
举报原因:
原因补充:

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