精华内容
下载资源
问答
  • VB 读取文件 VB6.0 实用FSO

    千次阅读 2015-04-24 19:19:51
     FileSystem: 返回指定驱动器使用的文件系统类型。  FreeSpace:返回指定驱动器上或共享驱动器可用的磁盘空间,这个属性是只读的。  IsReady:确定指定的驱动器是否准备好。  Path :返回指定文件、...
        file1 = "c:\Myfile10001.txt"
    
        Const ForReading = 1, ForWriting = 2, ForAppending = 3
        Dim fs1, f1
        Set fs1 = CreateObject("Scripting.FileSystemObject")
        Set f1 = fs1.OpenTextFile(file1, ForReading, TristateFalse)
        MsgBox f1.Readline
        MsgBox f1.Readline
        MsgBox f1.Readline
        MsgBox f1.Readline
       
        f1.Close
       


     

     

    '函数:一次性读文件至变量,非常快  Function GetFile(FileName As String) As String  Dim i As Integer, s As String, BB() As Byte  If Dir(FileName) = "" Then Exit Function  i = FreeFile  ReDim BB(FileLen(FileName) - 1)  Open FileName For Binary As #i  Get #i, , BB  Close #i  s = StrConv(BB, vbUnicode)  GetFile = s  End Function    '调用举例:  dim s as string  s=GetFile("c:\1.txt")


     


       FileSystemObject是包含在Microsoft脚本运行时间中的一个对象,对象中的函数提供了读写文本文件的功能。  

    你可以通过调用OpenTextFile方法来读取一个文本文件。OpenTextFile方法的第一个参数是指定打开的文件名;第二个参数是指定文件是读取,增添,或者写入;第三个参数决定当指定的文件名不存在时新的文件是否要建立;第四个参数指定文件的格式是ASCII 还是Unicode。这一方法返回的是一个TextStream对象。

    下面的代码段将一个文本文件中的内容读入一个TextBox控件。TextStream中的ReadAll方法用于读出文件的内容,然后使用Close方法来关闭文件。

    Dim objFSO As FileSystemObject
    Dim objText As TextStream

    Set objFSO = New FileSystemObject

    Set objText = objFSO.OpenTextFile(App.Path & "\temp.txt", _
                  ForReading, False, TristateUseDefault)
    Text1.Text = objText.ReadAll()
    Call objText.Close

    为了能够在一个文本文件中写入内容,可以先打开文件,然后使用TextStream中的Write方法输入需要的值。

    Set objText = objFSO.OpenTextFile(App.Path & "\temp.txt", _
                  ForWriting, False, TristateUseDefault)
    Call objText.Write(Text1.Text)
    Call objText.Close

     


     

    FileSystemObject
    求助编辑百科名片

    文件系统对象FSO的英文全称是File System Object ,这种对象模型提出了有别于传统的文件操作语句处理文件和文件夹的方法。通过采用object.method这种在面向对象编程中广泛使用的语法,将一系列操作文件和文件夹的动作通过调用对象本身的属性直接实现。


     

    目录

    FSO(File System Object)对象模型
    一、FSO 对象模型
    FSO对象模型包含
    二、FSO对象模型的应用在VB中的应用
    (一)创建FSO对象模型
    (二)Drive对象
    (三)Folder对象
    (四)File对象和TextStream对象
    三、结束语
    File System Object 在VBscript 里的应用.
    5.4.1 FileSystemObject对象成员概要
    表5-4 FileSystemObject对象的属性及说明
    表5-5 与驱动器有关的方法及说明
    方 法 说 明
    FSO(File System Object)对象模型
    一、FSO 对象模型
    FSO对象模型包含
    二、FSO对象模型的应用在VB中的应用
    (一)创建FSO对象模型
    (二)Drive对象
    (三)Folder对象
    (四)File对象和TextStream对象

    三、结束语
    File System Object 在VBscript 里的应用.
    5.4.1 FileSystemObject对象成员概要
    表5-4 FileSystemObject对象的属性及说明
    表5-5 与驱动器有关的方法及说明
    方 法 说 明

    展开

     
    FSO(File System Object)对象模型
      从 Visual Basic 的第一版至今,VB中有关文件的处理都是通过使用 Open 、Write以及其它一些相关的语句和函数来实现的。随着软件技术的不断发展,加上面向对象编程概念的日臻成熟,这些文件操作语句已经不能适应软件不断增加的复杂程度的需要了。因此,从VB6.0开始,微软提出了一个全新的文件系统对象FSO。


    一、FSO 对象模型
      不仅可以象使用传统文件操作语句那样实现文件的创建、改变、移动和删除,而且可以检测是否存在指定的文件夹,如果存在,那么,这个文件夹又位于磁盘上的什么位置。更令人高兴的是FSO 对象模型还可以获取关于文件和文件夹的信息,如名称、创建日期或最近修改日期等以及当前系统中使用的驱动器的信息,如驱动器的种类是CD-ROM还是可移动磁盘,当前磁盘的剩余空间还有多少。而以前要获取这些信息必须通过调用Windows API函数集中的相应函数才能实现。
    FSO对象模型包含
      在Scripting 类型库 (Scrrun.Dll)中,它同时包含了Drive、Folder、File、FileSystemObject和TextStream五个对象。其中Drive用来收集驱动器的信息,如可用磁盘空间或驱动器的类型;Folder用于创建、删除或移动文件夹,同时可以进行向系统查询文件夹的路径等操作;File的基本操作和Folder基本相同,所不同的是Files的操作主要是针对磁盘上的文件进行的;FileSystemObject是FSO对象模型中最主要对象,它提供了一套完整的可用于创建、删除文件和文件夹,收集驱动器、文件夹、文件相关信息的方法。需要注意的是,FSO对象模型提供的方法是冗余的,也就是说在实际使用中,FSO对象模型中包含的不同对象的不同方法进行的却是同样的操作,而且FileSystemObject对象的方法直接作用于其余对象,所以在后面的文章中并没有单独提到FileSystemObject对象,千万不要以为没有提到就不重要,事实上FileSystemObject对象在整个FSO对象模型中无处不在;最后的TextStream对象则是用来完成对文件的读写操作的。
      在初步了解了FSO对象模型之后,下面我们通过实际的代码对不同的对象进行进一步的阐述。


    二、FSO对象模型的应用在VB中的应用
      如下所示
    (一)创建FSO对象模型
      由于FSO对象包含在Scripting 类型库 (Scrrun.Dll)中,所以在使用前首先需要在在工程中引用这个文件,单击“工程”,“引用”,然后在“引用”对话框中选中“Microsoft Scripting Runtime”前的复选框,然后单击“确定”。
      要创建FSO对象可以采用两种方法,一种是将一个变量声明为FSO对象类型:Dim fsoTest As New FileSystemObject;另一种是通过CreateObject方法创建一个FSO 对象:Set fsoTest = CreateObject(“Scripting.FileSystemObject")。在实际使用中具体采用哪种声明方法,可根据个人的使用习惯而定。
      完成了FSO对象模型的创建之后,就可以利用创建的对象模型的方法访问下属各个对象的属性来获取所需信息或进行相关操作了,具体的方法在下面结合各个对象分别讲述。
    (二)Drive对象
      上面已经提到Drive对象是用来获取当前系统中各个驱动器的信息的。由于Drive对象没有方法,其应用都是通过属性表现出来的,所以我们必须熟悉Drive对象的属性:
      AvailableSpace:返回在指定的驱动器或网络共享上的用户可用的空间容量。
      DriveLetter :返回某个指定本地驱动器或网络驱动器的字母,这个属性是只读的。
      DriveType:返回指定驱动器的磁盘类型。
      FileSystem: 返回指定驱动器使用的文件系统类型。
      FreeSpace:返回指定驱动器上或共享驱动器可用的磁盘空间,这个属性是只读的。
      IsReady:确定指定的驱动器是否准备好。
      Path :返回指定文件、文件夹、或驱动器的路径。
      RootFolder :返回一个 Folder 对象,该对象表示一个指定驱动器的根文件夹。只读属性。
      SerialNumber:返回用于唯一标识磁盘卷标的十进制序列号。
      ShareName:返回指定驱动器的网络共享名
      TotalSize :以字节为单位,返回驱动器或网络共享的总空间大小。
      VolumeName :设置或返回指定驱动器的卷标名。
      从上面的属性可以看到Drive对象基本上包含了日常操作所需的全部的驱动器信息,因此在使用中是非常方便的。下面通过一个实例讲述Drive对象的使用。首先在VB中建立一个工程,然后添加一个命令按钮,将其Caption设置为“TestDrive”,然后在click事件中加入以下代码:
      Dim fsoTest As New FileSystemObject
      Dim drv1 As Drive, sReturn As String
      Set drv1 = fsoTest.GetDrive(“C:\")
      sReturn = “Drive " & “C:\" & vbCrLf
      sReturn = sReturn & “VolumeName" & drv1.VolumeName & vbCrLf
      sReturn = sReturn & “Total Space: " & FormatNumber(drv1.TotalSize / 1024, 0)
      sReturn = sReturn & “Kb" & vbCrLf
      sReturn = sReturn & “Free Space: " & FormatNumber(drv1.FreeSpace / 1024, 0)
      sReturn = sReturn &“Kb" & vbCrLf
      sReturn = sReturn &“FileSystem:" & drv1.FileSystem & vbCrLf
      MsgBox sReturn
      其中GetDrive方法返回一个与指定路径中的驱动器相对应的 Drive 对象。该方法的语法格式为object.GetDrive drivespec,object是一个FSO对象的名称,drivespec用于指定驱动器的名称。
      按F5运行上述代码,按下TestDrive按钮就会弹出一个消息框显示C盘的信息。


    (三)Folder对象
      在FSO 对象模型中,提供了丰富的有关文件夹操作的方法,这些方法分别是:
      FileSystemObject对象有关文件夹的方法:
      CreateFolder :创建一个文件夹 。
      DeleteFolder:删除一个文件夹 。
      MoveFolder :移动一个文件夹 。
      CopyFolder:复制一个文件夹 。
      FolderExists: 查找一个文件夹是否在驱动器上 。
      GetFolder :获得已有Folder对象的一个实例 。
      GetParentFolderName: 找出一个文件夹的父文件夹的名称。
      GetSpecialFolder: 找出系统文件夹的路径。
      Folder对象的方法:
      Delete :删除一个文件夹 。
      Move :移动一个文件夹 。
      Copy:复制一个文件夹。
      Name:检索文件夹的名称。
      在此需要强调一点,前面我们曾经提到过FSO对象模型包含的方法是冗余的,所以Folder对象的Delete、Move、Copy方法和FileSystemObject对象的DeleteFolder、MoveFolder、CopyFolder方法实际上是相同的,因此在实际使用中可以任选其中的一种。和Drive对象一样,下面通过实例演示Folder对象的应用。在VB下新建一个工程,然后在上面添加三个命令按钮,然后在Form1的通用部分加入以下代码:
      Option Explicit
      Dim fsoTest As New FileSystemObject
      Dim folder1 As Folder
      并且分别在三个命令按钮的click事件输入以下代码:
      Private Sub CmdCreate_Click()
      ' 获取 Folder 对象。
      Set folder1 = fsoTest.GetFolder(“C:")
      '创建文件夹
      fsoTest.CreateFolder (“C:\Test")
      MsgBox “folder C:\Test has created"
      End Sub
      Private Sub CmdDelete_Click()
      ' 获取 Drive 对象。
      Set folder1 = fsoTest.GetFolder(“C:")
      '删除文件夹
      fsoTest.DeleteFolder (“C:\Test")
      MsgBox“folder C:\Test has deleted"
      End Sub
      Private Sub CmdGetPro_Click()
      '获取文件夹的有关信息
      Dim sReturn As String
      Set folder1 = fsoTest.GetFolder(“C:\Windows")
      'sReturn = “The folder's Attributes is " & folder1.Attributes & vbCrLf
      '获取最近一次访问的时间
      sReturn = sReturn & “The folder's last access time is " & folder1.DateLastAccessed & vbCrLf
      '获取最后一次修改的时间
      sReturn = sReturn & “The folder's last modify time is " & folder1.DateLastModified & vbCrLf
      '获取文件夹的大小
      sReturn = sReturn & “The folder's size is " & FormatNumber(folder1.Size / 1024, 0)
      sReturn = sReturn & “Kb" & vbCrLf
      '判断文件或文件夹类型
      sReturn = sReturn & “The type is " & folder1.Type & vbCrLf
      MsgBox sReturn
      End Sub
      上述代码中提到的CreateFolder方法的语法形式为object.CreateFolder(foldername)。foldername指定了要创建的文件夹的名称,而DeleteFolder方法的语法形式为object.DeleteFolder folderspec[,force],其中,folderspec用来指定要删除的文件夹的名称,force是一个可选的布尔型参数,如果希望删除只读属性的文件夹则将该值设为TRUE,默认为FALSE。至于代码中用到的 Folder 对象的属性限于篇幅,就不详细介绍了,读者可参考VB文档中的相关内容。


    (四)File对象和TextStream对象
      由于有关File对象的复制,删除,移动等操作和Folder对象类似,所以这部分内容就不再重复。这里主要讲述利用File对象和TextStream对象操作文本文件。
      通常对文本文件的操作包括在文本文件中创建数据,在文本文件中添加数据,删除文本文件的数据等操作。这些操作都可以通过File对象和FileSystemObject对象的相关方法完成。不过在使用之前,首先要创建一个文本文件,这可以通过三种方法完成。一种方法是使用FileSystemObject对象的 CreateTextFile 方法。要创建一个空文本文件,可以用以下语句:
      Dim fsoTest As New FileSystemObject, fil1 As File
      Set fil 1= fsoTest.CreateTextFile(“c:\testfile.txt", True)
      第二种方法是使用 FileSystemObject 对象带 ForWriting 标志设置的 OpenTextFile 方法,
      Dim fsoTest As New FileSystemObject, ts1 As New TextStream
      Set ts1 = fsoTest.OpenTextFile(“c:\testfile.txt", ForWriting)
      第三种方法是使用File对象的带 ForWriting 标志设置的 OpenAsTextStream 方法:
      Dim fsoTest As New FileSystemObject, fil 1As File, ts 1As TextStream
      Set fsoTest = CreateObject(“Scripting.FileSystemObject")
      fsoTest.CreateTextFile (“c:\testfile.txt")
      Set fil1 = fsoTest.GetFile(“c:\testfile.txt")
      Set ts1 = fil1.OpenAsTextStream(ForWriting)
      其中CreateTextFile方法的第一个参数用来指定,第二个参数用来指定如果磁盘上已经存在要创建的文件是否覆盖,TRUE表示覆盖,FALSE表示不覆盖,省略表示不覆盖;OpenTextFile方法的第一个参数确定要打开的文本文件,第二个参数表示对该文件进行写操作;OpenAsTextStream方法的参数和OpenTextFile方法的第二个参数含义相同。
      在创建了写入数据的文本之后就可以利用TextStream 对象的 Write 或 WriteLine 方法了,它们之间的区别在于 WriteLine 在指定的字符串末尾添加换行符,而Write方法没有。如果想要向文本文件中添加一个空行,可以使用 WriteBlankLines 方法。 在完成写的动作之后,用Close方法关闭打开的文本文件。如果要读取一个存在的文本文件的内容,就要用到 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法;这些方法的区别是 Read:从一个文件中读取指定数量的字符 ;ReadLine:读取一整行(紧跟,但不包括,换行符); ReadAll :读取一个文本文件的所有内容。下面在一个VB的工程中演示上述的效果。
      在VB中新建一个工程,然后在Form1上添加两个命令按钮,然后输入以下代码:
      Private Sub CmdRead_Click()
      Dim fsoTest As New FileSystemObject, file1 As File, ts As TextStream, s As String
      Set file1 = fsoTest.GetFile(“C:\testfile.txt")
      Set ts = file1.OpenAsTextStream(ForReading)
      '读取一行
      s = ts.ReadLine
      MsgBox s
      ts.Close
      End Sub
      Private Sub CmdWrite_Click()
      Dim txtfile As File, ts As TextStream
      Set txtfile = fsoTest.GetFile(“c:\testfile.txt")
      Set ts = txtfile.OpenAsTextStream(ForWriting)
      '使用Write方法写入一行。
      ts.Write (“This is only a Test")
      ' 写入一行带有换行符的文本。
      ts.WriteLine (“Testing 1, 2, 3.")
      ' 向文件中写入三个换行符。
      ts.WriteBlankLines (3)
      ts.Close
      End Sub
      在这里我们假设已经在磁盘上建立了一个名为testfile.txt的文件。在按下F5运行时,先单击Write写入数据,然后按下Read读取数据。


    三、结束语
      通过上面的介绍,我们可以看到FSO对象模型的确在传统的文件操作语句之外,提供了一种更方便,功能更强大的访问文件的操作方法。不过,我们还需要注意到FSO对象模型目前还不完善,当前使用的FSO对象模型还不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,仍然要使用带 Random 或 Binary 标志的 Open 命令。但从目前FSO对象模型的实际应用来看,我们仍然可以将FSO对象模型作为一种比较简便的文件操作解决方案。
      (注:上述代码均在VB6.0 SR3)


    File System Object 在VBscript 里的应用.
      在代码内操作文本文件、文件夹及驱动器。它是脚本运行期库提供的对象之一,对于服务器ASP页面内的VBScript和JScript都有效。如果页面的扩展名为.hta(表示它们是HTA的一部分),它也可用在客户端的IE 5中。本节仅讨论在服务器上的ASP脚本如何使用FileSystemObject对象。
      超级文本应用程序(HTA)由指定的"受信任的"页面组成,在页面的<HEAD>段里包含<HTA: APPLICATION>元素。例如:
      <HTA:APPLICATION ID="objMyApp" APPLICATIONNAME="myApp">
      这些页面可以使用客户端脚本引擎中的一些不常用特性,这些特性中有FileSystemObject对象和TextStream对象。关于超级文本应用程序的更多信息,请访问Microsoft Workshop网站。
      可以使用下面的程序创建一个FileSystemObject对象实例:
      ' In VBScript:
      Dim objMyFSO
      Set objMyFSO = Server.CreateObject("Scripting.FileSystemObject")
      // In JScript:
      var objMyFSO = Server.CreateObject('Scripting.FileSystemObject');
      <!-- Server-side with an OBJECT element -->
      <OBJECT RUNAT="SERVER" SCOPE="PAGE" ID="objFSO"
      PROGID="Scripting.FileSystemObject">
      </OBJECT>
      在ASP页面里,增加一个对于FileSystemObject类型库的引用是非常有用的。这允许使用它直接定义的内置常数,不用像过去那样用数字等效表达式代替。整个脚本运行期库的类型库可以增加到任何ASP页面中,代码如下:
      <!-- METADATA TYPE="typelib" FILE="%systemroot%\System32scrrun.dll" -->如果你是在另一个目录下安装Windows,必须编辑FILE的属性值。

    5.4.1 FileSystemObject对象成员概要
      FileSystemObject对象提供一个属性和一系列方法,可用它们来操纵FileSystemObject对象实现的一些从属对象。这里提供了全部的内容概要,然后介绍每一个从属对象。
      1. FileSystemObject的属性
      FileSystemObject对象只有一个属性,它用于得到当前机器上的所有有效驱动器的列表,如表5-4所示:

    表5-4 FileSystemObject对象的属性及说明
      

    属 性说 明
    Drivers返回本地计算机可用的驱动器列表。


      2. FileSystemObject的方法
      FileSystemObject对象提供了使用从属对象的一系列方法,从属对象包括Drive、Folder和File等对象。它也实现了用于TextStream对象的两个方法:CreateTextFile和OpenTextFile。根据所使用的对象的类型,将方法划分为三类。
      (1) 与驱动器有关的方法
      与驱动器有关的方法如表5-5所示:

    表5-5 与驱动器有关的方法及说明
      

    方 法说 明
    DriveExists(drivespec)如果在drivespec中指定的驱动器存在,则返回True,否则返回False。
    drivespec参数可以是一个驱动器字母,或者是文件、文件夹的完整绝对路径
    GetDrive(drivespec)返回drivespec指定的驱动器所对应的Drive对象。drivespacec可以包含冒号、路径分隔符或者是网络共享名即:"C"、"C:"、"C:"及"\machinesharename"
    GetDriveName(drivespec)用字符串返回drivespec指定的驱动器的名称。drivespec参数必须是文件或文件夹的绝对路径,或者仅仅是驱动器字母,例如:"c:"或"c"


      (2) 与文件夹有关的方法
      与文件夹有关的方法如表5-6所示:
      表5-6 与文件夹有关的方法及说明方 法说 明BuildPath(path,name) 在已有的路径path上增添名字为name的文件或文件夹,如果需要,则增添路径分隔符'' CopyFolder(source,destination,overwrite) 从指定的源文件夹source(可以包含通配符)中复制一个或多个文件夹到指定的目标文件夹destination,包含了源文件夹中的所有文件。如果source包含通配符或destination末尾是路径分隔符(''),那么认为destination是要放置源文件夹的拷贝的文件夹。否则的话,认为destination是要创建的新文件夹的路径名。如果destination文件夹已经存在且overwrite参数设置为False,将产生错误,缺省的overwrite参数是True CreateFolder(foldername) 创建一个路径名为foldername的文件夹。如果foldername已经存在将产生错误 DeleteFolder(folderspec,force) 删除由folderspec指定的一个或多个文件夹(可以在路径的最后部分包含通过配符)及文件夹中的所有内容。如果可选的force参数设置为true,那么即使文件夹包含的文件具有只读属性,也将删除该文件夹。缺省的force参数是False FolderExist(folderspec)如果folderspec指定的文件夹存在则返回True,否则返回False。folderspec参数可以包含文件夹的绝对或相对路径,或者仅仅是当前文件夹中看到的文件夹名 GetAbsolutePathName(pathspec) 返回明确指定文件夹的路径,其中要考虑到当前文件夹的路径。例如,如果当前文件夹是"c:docssales",而pathspec是"jan",返回的字符是"c:docssalesjan"。通配符、".."和"\"路径操作符都是可以接受的 GetFolder(folderspec) 返回folderspec指定的文件夹对应的Folder对象。folderspec可以是文件夹的相对的或绝对的路径 GetParentFolderName(pathspec) 返回pathspec文件或文件夹的上一级文件夹。不检验该文件夹是否存在 GetSpecialfolder(folderspec) 返回一个特定的Windows文件夹相对应的Folder对象。参数folderspec的允许值是WindowsFolder(0)、SystemFolder(1)和TemporaryFolder(2) MoveFolder(source,destination) 将source指定的一个或多个文件夹移动到destination指定的文件夹。在source里可以包含通配符,但在destination中不行。如果source包含通配符或destination末尾是路径分隔符(''),则认为destination是要放置源文件夹的文件夹,否则认为它是一个新文件夹的完整路径和名字。如果目的文件夹destination已经存在则产生错误 (3) 与文件有关的方法 表5-7:与文件有关的方法方 法说 明CopyFile(source,destination, overwrite)将source(可包含通配符)指定的一个或多个文件复制到指定的目标文件夹destination。如果source包含通配符或destination末尾是路径分隔符(''),那么认为destination是文件夹。否则认为destination为一新文件的完全路径和名称。如果目标文件夹已经存在且overwrite参数设置为False,将产生错误。缺省的overwrite参数是True CreateTextFile(filename,overwrite, unicode) 用指定的文件名filename在磁盘上创建一个新的文本文件,并返回与其对应的TextStream对象,如果可选的overwrite参数设置为True,则覆盖同一路径下已有的同名文件。缺省的overwrite参数是False。如果可选的unicode参数设置为True,则该文件的内容将存储为Unicode文本,缺省的unicode参数是False DeleFile(filespec,force)删除由filespec指定的一个或多个文件(可以在路径的最后部分包含通配符)。如果可选的force参数设置为true,那么也删除具有只读属性的文件。缺省的force参数是False FileExists(filespec)如果filespec指定的文件存在则返回True,否则返回False。filespec参数可以包含文件的绝对路径或相对路径,或者是当前文件夹中的文件名 GetBaseName(filespec)返回filespec指定的文件的名称,即包含文件路径但去掉了文件的扩展名 GetExtensionName(filespec)返回filespec指定的文件的扩展名 GetFile(filespec)返回filespec指定的文件所对应的File对象。可以指定文件的相对或绝对路径 GetFileName(pathspec)返回pathspec指定的文件的路径或文件名,如果没有文件名就返回最后的文件夹名。不检查该文件或文件夹是否存在 GetTempName()返回一个随机产生的文件名,用于完成运算所需的临时文件或文件夹 MoveFile(source,destination)将source指定的一个或多个源文件移动到destination指定的目的文件夹。在source里可以包含通配符,但destination不行。如果source包含通过配符或destination末尾是路径分隔符(''),那么认为destination是一文件夹。否则,认为destination是一新文件夹的完整路径和名称。如果目的文件夹已经存在则产生错误 OpenTextFile(filename,iomode,create, format)创建一个名叫做filename的文件,或打开一个现有的名为filename的文件,并且返回一个与其相关的TextStream对象。filename参数可以包含绝对或相对路径。iomode参数指定了所要求的访问类型。允许的数值是ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。当写入或追加到一个不存在的文件时,如果create参数设置为true,就将创建一个新文件。缺省的create参数是False。format参数说明对文件读或写的数据格式。允许数值是:TristatetFalse(0)(缺省),按照ASCII格式打开;TristatetTrue(-1),按照Unicode格式打开;TristateDefault(-2),用系统缺省格式打开 Unicode文件使用两个字节标识每个字符,取消了ASCII字符最多256个的限制。 5.4.2 使用驱动器 下面是使用FileSystemObject对象的简单例子,它使用DriveExists方法得到现有的驱动器字母的列表: ' In VBScript Set objFSO = Server.CreateObject("Scripting.FileSystemObject") For intCode = 65 To 90 'ANSI codes for 'A' to 'Z' strLetter = Chr(intCode) If objFSO.DriveExists(strLetter) Then Response.Write "Found drive " & strLetter & ":<BR>" End If Next 1. Folder对象 Driver对象的RootFolder属性返回一个Folder对象,通过该对象可访问这个驱动器内的所有的内容。可以使用这个Folder对象的属性和方法遍历驱动器上的目录,并得到该文件夹和其他文件夹的属性。 (1) Folder对象的属性 Folder对象提供一组属性,可用这些属性得到关于当前文件夹的更多信息,也可以改变该文件夹的名称。其属性及说明如表5-9所示: 表5-9 Folder 对象的属性及说明 属 性 说 明 Attributes 返回文件夹的属性。可以是下列值中的一个或其组合:Normal(0)、ReadOnly(1)、Hidden(2)、System(4)、Volume(名称)(8)、Directory(文件夹)(16)、Archive(32)、Alias(64)和Compressed(128)。例如,一个隐藏的只读文件,Attributes的值为3 DateCreated 返回该文件夹的创建日期和时间 DateLastAccessed 返回最后一次访问该文件夹的日期和时间 DateLastModified 返回最后一次修改该文件夹的日期和时间 Drive 返回该文件夹所在的驱动器的驱动器字母 Files 返回Folder对象包含的Files集合,表示该文件夹内所有的文件 IsRootFolder 返回一个布尔值说明该文件夹是否是当前驱动器的根文件夹 Name 设定或返回文件夹的名字 ParentFolder 返回该文件夹的父文件夹对应的Folder对象 Path 返回文件夹的绝对路径,使用相应的长文件名 ShortName 返回DOS风格的8.3形式的文件夹名
      ShortPath
      返回DOS风格的8.3形式的文件夹的绝对路径
      Size
      返回包含在该文件夹里所有文件和子文件夹的大小
      SubFolers
      返回该文件夹内包含的所有子文件夹对应的Folders集合,包括隐藏文件夹和系统文件夹
      Type
      如果可能,返回一个文件夹的说明字符串(例如,"Recycle Bin")
      (2) Folder对象的方法
      Folder对象提供一组可用于复制、删除和移动当前文件夹的方法。这些方法的运行方式与FileSystemObject对象的CopyFolder、DeleFolder和MoveFolder方法相同,但这些方法不要求source参数,因为源文件就是这个文件夹。这些方法及说明如表5-10所示:
      表5-10 Folder对象的方法及说明
    编辑本段方 法 说 明
      Copy(destination,overwrite)
      将这个文件夹及所有的内容复制到destination指定的文件夹。如果destination的末尾是路径分隔符(''),那么认为destination是放置拷贝文件夹的一个文件夹。否则认为destination是要创建的新文件夹的路径和名字。如果目标文件夹已经存在且overwrite参数设置为False,将产生错误,缺省的overwrite参数是True
      Delete(force)
      删除文件夹及里面的所有内容。如果可选的force参数设置为True,即使文件夹设置为只读或含有只读的文件,也将删除该文件夹。缺省的force是False
      Move(destination)
      将文件夹及里面所有的内容移动到destination指定的文件夹。如果destination的末尾是路径分隔符(''),那么认为destination是放置移动文件夹的一个文件夹。否则认为destination是一个新的文件夹的路径和名字。如果目标文件夹已经存在,则出错
      CreateTextFile
      (filename,overwrite,unicode)
      用指定的文件名在文件夹内创建一个新的文本文件,并且返回一个相应的TextStream对象。如果可选的overwrite参数设置为True,将覆盖任何已有的同名文件。缺省的overwrite参数是False。如果可选的unicode参数设置为True,文件的内容将存储为unicode文本。缺省的unicode是False
      在文件夹之间可以使用当前文件夹的ParentFolder属性,返回到父目录。当到达一个文件夹时,如果IsRootFolder属性是True,就停下来。离开驱动器的根目录,沿目录树向下,可遍历或访问在Folders集合(由当前文件夹的SubFolders属性返回)内的指定文件夹。


     

    vb读取txt文件到textbox


    1.怎么通过代码创建一个文本文件,并读取,更新内容
    以上为随即方式打开的文本文件
    dim gfilenum as integer
    gfilenum = FreeFile
    Open   "文件路径及文件名" For Random As gfilenum len=3
    \'以随即方式打开一文件如果文件不存在就新建
    用get #gfilenum ,记录在文件中位置,要放取得的数据的变量\'读取操作
    用put #gfilenum ,记录在文件中位置,要放着要写入数据的变量\'写操作
    close #filenum\'关闭文件
    以下为顺序方式打开的文件
    dim gfilenum as integer
    gfilenum = FreeFile
    Open   "文件路径及文件名" For output As gfilenum \'以写入方式打开文本
    print #gfilenum,要写入的文本
    write #filenumber,要写入的文本

    dim gfilenum as integer
    gfilenum = FreeFile
    Open   "文件路径及文件名" For input As gfilenum \'以读出方式打开文本
    input #gfilenum ,用来放读取的内容的内存变量名
    还可用line input#,input()等读取更详细的查msdn

    2.VB读取文本文件时,调用TextStream 对象中使用OpenTextFile报错了。
    如果是
    Set f = fs.OpenTextFile("E:\\table\\trace.txt", forreading, True, TristateUseDefault)
    出现错误:
    Run-time error \'5\':
    Invalid procedure call or argument

    如果是
    Set f = fs.OpenTextFile("E:\\table\\trace.txt)"
    则不会报错。

    用文件对象啊FileSystemControl操作就好了啊
    再加上一个TextStream读取文件第一行就好了啊。

    3.VB通过FileSystemObject,可以读取文本文件(.txt)。对于.bat文件,VB可否直接读取?
    bat也属于文本类文件
    可以读取

    不用FSO也行:

    把文本文件内容读取TextBox:
    Dim TempFile As Long
    Dim LoadBytes() As Byte

    TempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Redim LoadBytes(1 To Lof(TempFile)) As Byte
    Get #TempFile,,LoadBytes
    Close TempFile

    Text1.Text=StrConv(LoadBytes,vbUniCode)

    把TextBox内容写入文本文件:
    Dim TempFile As Long
    Dim SaveBytes() As Byte

    SaveBytes=StrConv(Text1.Text,vbFromUniCode)

    TempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Put #TempFile,,SaveBytes
    Close TempFile

    4.
    打开文本文件  
    open app.path &"/你的文本文件名.txt" for output as #1
         Message.Name=text1.text
         Message.Phone=text2.text
         .......................
         message.PostCode=text5.text
    Put #1,i,Message   \'(此处i=1,如要多次写入,可用循环设置i的值)
    close #1
    \'写入的同时即已保存
    查询的话就取出文本里的内容,用instr()函数就可实现了

    5.
    查找vbCrLf、vbLf换行标记

    6.怎样读取一个文本文件的全部内容
    dim lenfile as integer
    dim filenum as integer
    filenum=freefile()
    open "file.dat" for input as filenum
    lenfile=lof(#filenum)
    strfile=input(lenfile,#filenum)\'将所有数据放入变量strfile中
    close filenum

    Private Sub Form_Load()
         Const ForReading = 1, ForWriting = 2
         Dim fso, f
         Dim SkipLineInFile As String
         Set fso = CreateObject("Scripting.FileSystemObject")
         Set f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, True)
         f.Write "Hello world!" & vbCrLf & "VB Script is fun!"
         Set f = fso.OpenTextFile("c:\\testfile.txt", ForReading)
         SkipLineInFile = f.readall
         Debug.Print SkipLineInFile

    End Sub

    7.把文本文件内容读取TextBox:
    Dim TempFile As Long
    Dim LoadBytes() As Byte

    TempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Redim LoadBytes(1 To Lof(TempFile)) As Byte
    Get #TempFile,,LoadBytes
    Close TempFile

    Text1.Text=StrConv(LoadBytes,vbUniCode)

    8. 把TextBox内容写入文本文件:
    Dim TempFile As Long
    Dim SaveBytes() As Byte

    SaveBytes=StrConv(Text1.Text,vbFromUniCode)

    TempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Put #TempFile,,SaveBytes
    Close TempFile

    9.已知文本文件,要从中搜索一段特定的字符串信息。如搜索[MAGIC_DATABASES],该怎么做?
    dim str as string
    open commondialog1.filename for input #1
    input #1, str
    dim where as integer
    where = instr(str,"magic_databases")

    10.
    Line Input # 语句示例
    本示例使用 Line Input # 语句从顺序文件中读入一行数据,并将该行数据赋予一个变量。本示例假设 TESTFILE 文件内含数行文本数据。

    Dim TextLine
    Open "TESTFILE" For Input As #1   \' 打开文件。
    Do While Not EOF(1)   \' 循环至文件尾。
         Line Input #1, TextLine   \' 读入一行数据并将其赋予某变量。
         Debug.Print TextLine   \' 在立即窗口中显示数据。
    Loop
    Close #1   \' 关闭文件。

    11.如何操作“文本文件”
    fso(Filesystemobject)对象集中的文件集合里有readline方法。

    Dim of As Object
    Dim fs as Object
    dim TextLine as string

    Set fs=createobject("scripting.Filesystemobject")
    set of=fs.OpenTextFile(app,path+"\\myfile.aaa")
    //myfile.aaa 是一个文本文件
    textling=of.readline
    //如果你要读取第14行,可以用一个循环,跳过前面的13行,如下
    dim lop as integer
    for lop=0 to 12
       of.skip
    next
    //然后再读取

    12.
    搜索了一下,大家主要用两种方法对文本文件加密。
    1.对文本文件的ASC码加减
    2.用XOR函数

    我发现都有问题举例
    1.代码
    Public Function nnnn(ByVal s As String) As String \'解密
    On Error Resume Next
    Dim ss As String, i As Byte, lens As Byte
    lens = Len(s)
    For i = 1 To lens
       ss = ss & Chr(Asc(Mid(s, i, 1)) - lens - i)
    Next
    nnnn = ss
    End Function


    Public Function mmmm(ByVal s As String) As String   \'加密
    On Error Resume Next
    Dim ss As String, i As Byte, lens As Byte
    lens = Len(s)
    For i = 1 To lens
       ss = ss & Chr(Asc(Mid(s, i, 1)) + lens + 1)
    Next
    mmmm = ss
    End Function
    当文件中有“!~”时出错

    XOR加密
    Dim I as long

    For I=1 To UBound(LoadBytes)
       LoadBytes(I)=LoadBytes(I) Xor &HFF
    Next I

    13.怎么判断一个文本文件是否打开?
    判断如果没打开就删除该文本文件!
    要用到FileSystemObject 对象的 FileExists 和 deletefile方法

    if dir(myfile)="" then exit sub
    FileNumber = FreeFile   \' 取得未使用的文件号。
    On Error GoTo ErrorHandler   \' 打开错误处理程序。
    Open MyFile For Output As #FileNumber   \' 打开输出文件。
    Kill "TESTFILE"   \' 试图删除已打开的文件。
    Exit Sub   \' 退出程序,以避免进入错误处理程序。

    ErrorHandler:   \' 错误处理程序。
         Select Case Err.Number   \' 检查错误代号。
         Case 55   \' 发生“文件已打开”的错误。
         Close #FileNumber       \' 关闭已打开的文件。
         Case Else
         \' 处理其他错误状态 . . . 
         End Select
         Resume   \' 将执行返回到发生错误的语句。

    14.打开一个文本文件怎样最快?
    Dim fn As Long, ts As String
    fn = FreeFile
    Open "c:\\test.txt" For Binary As #fn
    ts = StrConv(InputB(LOF(fn), #fn), vbUnicode)
    Text1 = ts
    Close #fn

    Dim fn As Long, ts As String
    fn = FreeFile
    Open "c:\\test.txt" For Binary As #fn
    ts = Input(LOF(fn), #fn)
    Text1 = ts
    Close #fn

    15.怎么判断文本文件读取到了最后一行?
    用fsoTextStream.AtEndOfStream可以判断

    16.如何在文本文件中插入一行字串?
    用Open For Append的方法只能加在最后面

    就用两个文件合并好了
    Shell "command /c copy aa.txt + bb.txt cc.txt ", vbHide
    但我觉的不是太好,你自己看看对你有没有帮助吧。

    17.
    Open "TESTFILE.txt" For Output As #1   \' 打开输出文件。
    Write #1, "Hello World",   \' 写入以逗号隔开的数据。
    Write #1,   \' 写入空白行。
    Close #1   \' 关闭文件
    请问怎样在原先TESTFILE.txt增加Hello World(即不删除原先的内容)
       
    Open "TESTFILE.txt" For Append As #1
    Write #1, "Hello World",
    Close #1

    18.如何实现对文本文件任意一行的读写?
    利用VB的File System Objects(FSO)对象模型
    要想对任一行读写,不用将前面内容顺序读出,但要用FSO对象的方法移动文件指针,具体方法如下:

    1. 在VB编辑器中引用“Microsoft Scripting RunTime"

    2. Dim fso As New FileSystemObject   \'定义FSO对象
         Dim ts As TextStream               \'定义文本流

         \'打开文件
         Set ts = fso.OpenTextFile("c:\\test.txt", ForWriting)

    之后即可用ts的方法进行操作,可参见MSDN,以下简要说明:
       读数据有:Read、ReadLine、ReadAll  
       写数据有:Write、WirteBlankLine、WirteLine
       移动文件指针有:Skip、SkipLine

    操作完毕要关闭文件流
       ts.close

    19.在文件结尾写上新的行:
    Dim tFileNumber As Integer 
    Dim tWriteStr As String \'要写的字符串。
    tFileNumber=FreeFile
    tWriteStr=你需要的内容
    Open pFileName For Append As #tFileNumber \'Append为在文件结尾顺序写文件夹。或者以Output模式打开,使用Seek(tFileNumberm,LOF(tFileNumber))也可以定义指针到文件结尾。
       Print #tFileNumber,tWriteStr \'写到文件里。
    Close #tFileNumber

    如果文件上一行没有换行,将导致你写的第一行和原来文件最后一行接在一起。解决办法是:

    tWriteStr=Chr(13) & Chr(10) & tWriteStr

    在写第一行前加这一句,将导致在这行前加换行符号。

      另外,假如你有100行要写的内容,那么你往文件写100次不如把100行合并成一个字符串一起写的好。写100行的时间比合并100行后写一次的时间要慢。
      同时,不要多次Open Close地写文件。Open和Close都要重新分配缓冲区,导致程序速度下降。尽量在一次Open后,全部写完再Close,这样可以提高效率。
      但是需要特别注意!在Close前,如果程序因某种原因非法关闭,那么可能要丢失数据。因为只有在Close后才将缓冲区里的信息真正全部保存。而没有Close的文件,可能有部分内容在内存里没有存盘,这是很危险的。如果你确保在短时间内进行单一的操作,那么就在Close前写过程。如果需要长时间的复杂操作,就要多次Open Close了。
         在Open Close之间进行存取操作将获得最快的效率,而分多次Open Close获得最佳的安全。此外还有一个诀窍:如果你想在读一个文件同时写一个文件,那只要把它分别用两个方式打开。

       Open "1.txt" For Input As #1
       Open "1.txt" For Output As #2
         Print #2,"小仙妹" \'写1.txt
         Seek #1,1
         Line Input #1,Ld   \'读1.txt
         Seek #1,1   \'如果去掉这句,你看看读第而次的时候会怎样?(肯定出错了!)
         Line Input #1,Ld 
       Close #2
       Close #1

    典型的读文件:

    Dim tFileNumber As Integer \'文件号
    Dim tLoadStr As String \'读文件行的变量
    tFileNumber=FreeFile       \'FreeFile是取当前闲置的文件号的函数。实现自动分配一个文件号码。这样使这段程序几乎可以兼容在程序所有的部分。
    Open pFileName For Input As #tFileNumber \'Input方式为顺序读文件。
       Line Input #tFileNumber,tLoadStr \'Line Input语句为整行读取,否则如果只用Input则遇到逗号也算一个段落。如果你想读第12行,在不知道12行的位置的前提下,那要读12次的。
    Close #tFileNumber

    读文件指定行:读文件最大的问题就是判断文件的结束。如果超过文件结束,将产生错误。使用EOF函数可以判断“文件指针”是否到达文件结束位置。

    方法一(传统方法):
    Dim tFileNumber As Integer 
    Dim tLoadStr As String 
    Dim tEnd As Long \'你要读的行数。
    Dim tAdd As Long \'记数
    tFileNumber=FreeFile
    tEnd=12 \'假设你要读12行
    Open pFileName For Input As #tFileNumber 
       Do Until EOF(tFileNumber) Or tAdd=tEnd \'EOF函数是判断是否已经到了结尾或到了你想找的行。
       Line Input #tFileNumber,tLoadStr
       tAdd=tAdd+1 \'记数累加,读一行加一。
       Loop 
    Close #tFileNumber

    方法二(比较实用的):
    Dim tFileNumber As Integer 
    Dim tLoadStr As String 
    Dim tEnd As Long \'你要读的行数。
    Dim tAdd As Long \'记数
    tFileNumber=FreeFile
    tEnd=12 \'假设你要读12行
    Open pFileName For Input As #tFileNumber 
       For tAdd=1 To tEnd
       Line Input #tFileNumber,tLoadStr
       If EOF(tFileNumber) Then Exit For \'到结尾则退出循环。
       Next
    Close #tFileNumber

    以上都是我在编程当中总结出来的非常惨痛的教训,希望你不要步我后尘。

    20.用FSO来读文本文件时怎样返回该文本文件的总行数?
    Set openfile = openfso.OpenTextFile(CommonDialog1.FileName)
       Static i As Integer
       i = 0
       Do While Not openfile.AtEndOfLine
       openfile.ReadLine
       i = i + 1
       Loop
       MsgBox "共" & i & "行", vbOKOnly, "hello"

    21.treeview 能够生成两层以上的节点吗?
    Private Sub Form_Load()
       Dim NodX As Node
       Set NodX = TreeView1.Nodes.Add(, , "R", "ROOT")
       Set NodX = TreeView1.Nodes.Add("R", tvwChild, "key1", "CHILD")
       Set NodX = TreeView1.Nodes.Add("key1", tvwChild, "key2", "CHILD_CHILD")
       NodX.EnsureVisible
    End Sub

    22.怎样获得一个文件夹里的文件数,并且分别得到里面的文件名?
    dim sTemp as string
    dim sFileName(100) as string   \'记录文件名
    dim intTotal as integer   \'文件总数
    intTotal=0
    sTemp=Dir$(Path & "\\*.*")
    do while sTemp<>""
         sFileName(intTotal)=sTemp
         intTotal=intTotal+1
         sTemp=Dir$
    loop

    23.取文件夹的文件名列表,并按修改时间排序?
    \'添加[工程]--[引用] “Microsoft Scripting Runtime”


    Option Explicit

    Private Type typFlieDate
           Name As String
           CreatedDate As Date
           AccessedDate As Date
           ModifiedDate As Date
       End Type

    Private myFiles() As typFlieDate   \'包含文件的数组

    Private Sub Command1_Click()
       Dim n As Integer
       n = GetFolderFiles("d:\\", 1)
    End Sub

    Private Function GetFolderFiles(Path As String, OrderBy As Integer) As Integer
    \'path 文件夹路径
    \'orderby 排序依据   1:按创建时间   2:按访问时间   3:按修改时间   4:按名称
    \'返回文件夹中文件的个数
    \'如果要计算子文件夹可以通过 fldr.SubFolders 访问,方法类似

       Dim tmpFile As typFlieDate
       Dim n As Integer, i As Integer, j As Integer
       Dim fso As New FileSystemObject
       Dim fldr As Folder
       Dim fls As Files
       Dim fl As File
        
    \'读去文件
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set fldr = fso.GetFolder(Path)
       Set fls = fldr.Files
       n = fls.Count
       If n > 0 Then
       ReDim myFiles(n - 1)
       i = 0
       For Each fl In fls
         myFiles(i).Name = fl.Name
         myFiles(i).AccessedDate = fl.DateLastAccessed
         myFiles(i).CreatedDate = fl.DateCreated
         myFiles(i).ModifiedDate = fl.DateLastModified
         i = i + 1
       Next
    \'排序     ---   升序
       For i = 0 To n - 1
         For j = i + 1 To n - 1
       Select Case OrderBy
         Case 1         \'创建时间
         If myFiles(i).CreatedDate > myFiles(j).CreatedDate Then
           tmpFile = myFiles(i)
           myFiles(i) = myFiles(j)
           myFiles(j) = tmpFile
          
    \'               tmpFile.Name = myFiles(i).Name
    \'               tmpFile.AccessedDate = myFiles(i).AccessedDate
    \'               tmpFile.CreatedDate = myFiles(i).CreatedDate
    \'               tmpFile.ModifiedDate = myFiles(i).ModifiedDate
    \'
    \'               myFiles(i).AccessedDate = myFiles(j).AccessedDate
    \'               myFiles(i).CreatedDate = myFiles(j).CreatedDate
    \'               myFiles(i).ModifiedDate = myFiles(j).ModifiedDate
    \'               myFiles(i).Name = myFiles(j).Name
    \'
    \'               myFiles(j).AccessedDate = tmpFile.AccessedDate
    \'               myFiles(j).CreatedDate = tmpFile.CreatedDate
    \'               myFiles(j).ModifiedDate = tmpFile.ModifiedDate
    \'               myFiles(j).Name = tmpFile.Name
         End If
          
         Case 2         \'访问时间
         If myFiles(i).AccessedDate > myFiles(j).AccessedDate Then
           tmpFile = myFiles(i)
           myFiles(i) = myFiles(j)
           myFiles(j) = tmpFile
         End If
         Case 3         \'修改时间
         If myFiles(i).ModifiedDate > myFiles(j).ModifiedDate Then
           tmpFile = myFiles(i)
           myFiles(i) = myFiles(j)
           myFiles(j) = tmpFile
         End If
         Case 4         \'名称
         If UCase(myFiles(i).Name) > UCase(myFiles(j).Name) Then
           tmpFile = myFiles(i)
           myFiles(i) = myFiles(j)
           myFiles(j) = tmpFile
         End If
       End Select
         Next j
       Next i
       End If
       GetFolderFiles = n
    End Function

    展开全文
  • 使用VB6资源文件开发多国语言应用
            VB6被很多程序员认为是一个过气的开发工具,但它实在是微软最经典的开发工具,没有之一!编译出的程序短小精悍,一般就几十K,而且从XP以后的操作系统,均携带其运行时库,只要程序只使用VB的标准控件,连安装都不需要,可以直接运行。所以,不太复杂的GUI程序我都使用VB6开发,速度那怎叫一个快字了得!
    
            最近,我做了一个Mini流图软件,但需要支持多国语言。查了一下网上的资料,方案感觉都很山寨。基本上都是头疼医头,脚疼医脚,没有一个基于系统的全面调理方案。于是,仔细研究了VB6的资源文件体系,发现原来微软早就提供了完美的解决方案,只是中国的程序员大多不习惯这种贵族式的优雅。VC6也使用了这个机制,但GUI做得比VB差几条街,一点儿也不直观,智商低于120的程序员基本无缘此功能,但以后Visual Studio的VC一直继承下来这个机制(虽然表达方式依旧那么烂),不像VB从.net开始抛弃了这一机制,使用了简单粗暴的方法来解决。也许,简单粗暴是这个社会的潮流,但我依然追求优雅。所以以下内容仅适用于对完美有变态追求的同学们。
            VB6的资源文件中一般包括字符串、图标、光标、位图和用户定义的字节流,共5种类型的资源,每种资源的实例都有2个属性,一个是资源ID,另一个就是语言ID。就是说,一个资源需要两个ID共同标识。例如:一个资源ID为101的字符串,其语言ID为1028的字符串内容是台湾中文,其语言ID为1033的字符串内容是美式英文,其语言ID为1049的字符串内容是俄文,其语言ID为2052的字符串内容是中国中文,其语言ID为2057的字符串内容是英式英文等等。如图所示是VB6的字符串资源编辑器,很直观吧!开发VC的项目经理太自大!

            当程序请求资源时,只需要输入一个资源ID参数,运行时库会根据系统语言ID自动返回对应的资源。对于急功近利的同学们,这些基本就够用了。因为项目经理说做8国语言,大部分程序员不会考虑第9国人民的感受。后面将分享VB6资源文件体系的读取策略以便能优雅的解决第9国人民的问题。
            在这之前,得先普及一下Windows内核的多国语言知识。微软从NT开始使用Unicode内核,其好处就是大大降低全球部署的成本,这是微软称霸全球的重要技术支持手段之一。对使用者而言,最直观的好处就是在输出的一个字符串里面可以同时包含多个国家的文字。虽然这种需求很少见,但切换语言这种事在Unicode技术的支持下,那就都不是事!
            虽然Windows在发行时,都指明了语言版本,但实际上,任何一个语言的Windows都支持任意微软支持的语言。所以在语言上,Windows有两种级别的语言,一种是安装级(Installed),即系统(System)语言;另一种是支持级(Supported),即用户(User)语言。
            一般情况下,系统语言和用户语言是一样的。那二般是个什么情况?举个例子,在一个国际学校,老师是美国人,他当然安装英文版Windows,但他的学生分别是法国人、德国人、中国人、韩国人,就是没有美国人!为了考虑学生的爱国情怀,老师给他们每个人分配一个登录账号,登录后,可以修改控制面板中的地区和语言,以便符合每个学生的习惯。这样,在每个学生的登录会话环境中,系统语言都是英语,用户语言是用户在控制面板中设置的语言。
            OK,现在来看看VB6的运行时库对资源请求是如何动作的。当程序请求资源时,只需要输入一个资源ID参数,运行时库首先使用用户语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果不成功,再使用系统语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果还不成功,则把请求的资源ID所拥有的所有语言ID中ID值最小的那个对应的资源返回。
            看那个例子,为了方便讲解,我加了一个资源ID是99的字符串,里面的内容是语言ID值。如果登录会话环境的用户语言和系统语言都没有匹配上,则返回中文(台湾)的字符串资源,因为1028是所有提供的语言ID中最小的!
            说到这里,大家可能很快想到,ID值最小的一定是0,那0是怎么定义的呢?那我们得先看看微软是如何定义语言ID的:
            #define MAKELANGID(PrimaryLanguage, SubLanguage) ((((WORD) (SubLanguage)) << 10) | (WORD) (PrimaryLanguage)) 
            意思是语言ID由1个16位的字表示(最多支持65536种语言),其中低10位为主语言ID(最多支持1024种主语言),高6位为子语言ID(每个主语言最多有64种子语言)。
            主语言和子语言策略是表达以下情况:如西班牙语,世界上母语是西班牙语的国家有20多个,比英语还多,这个要问那位15世纪才华横溢、精力充沛的伊莎贝拉女王,是她指使哥伦布同学全球殖民而导致我们现在的问题。这20多个国家的西班牙文叫子语言,但他们都属于西班牙语区,这个区称之为主语言。
            主语言ID为0被微软称之为中性语言(Neutral),它居然也有子语言,分别是SUBLANG_NEUTRAL(0)、SUBLANG_DEFAULT(1)和SUBLANG_SYS_DEFAULT(2),分别对应3种中性语言Neutral、Neutral Default和Neutral System Default。
            所以,前面讲的是个家庭版,现在看看微软的运行时库对资源请求动作的专业版。当程序请求资源时,只需要输入一个资源ID参数,运行时库首先使用用户语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果不成功,则返回主语言ID为0且子语言ID也为0的资源;如果没找到,再使用系统语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果还不成功,则把请求的资源ID所拥有的所有语言ID中ID值最小的那个对应的资源返回。
            所以,使用VB6多国语言资源文件的最佳实践是:根据软件主要投放语言区域,把那个语言设置为Neutral Default或Neutral System Default(这两个效果一样,如果设置为Neutral,则系统语言将失去一次匹配的机会)。例如:软件准备投放欧洲市场,项目只准备了英、法、德、意4国语言,你可以把英语设置为Neutral Default。当用户语言和系统语言都不是法、德、意时,均使用英语;如果不这么配置,就会使用语言ID最小的那个语言(德语)。显然,在欧洲,认识英文的人应该比认识德文的人多,这样的用户体验更好。
            当然,最好的方案还是提供所有语言!其实,也不是很难!关键是工欲善其事,必先利其器!
            2001年,有个叫Phil Jollans( http://www.jollans.com)的德国小伙子做了一个叫做World Resource String Editor的VB6插件,可以直接从excel中导入字符串资源!有图有真相:

            我就是用这个工具,只需要填写中国(中文)那一列的内容,把文件分发给各个翻译组,再汇总导入,工作之轻松令人发指!什么?西班牙语有20个国家?来吧,我把西班牙(西班牙)那一列复制20列,再把子语言ID一换,轻松支持所有西班牙地区的国家。羽扇纶巾,樯橹灰飞烟灭的感觉!满足需求都弱爆了,预测需求才能立于不败之地。
            但预测需求也只是个中级水平,只有引领需求才是最高境界!那什么才是最高境界呢?说到这里,上面已经解决了80%的问题,但只花费了20%的功力,下面的内容解决剩下20%的问题,但需要80%的功力。
            其实,微软的整个策略还是对需求了解得不够充分,略显简单粗暴。例如:比利时、瑞士等几个欧洲小国也说法语,它对法国的标准法语进行了一些扩展,就像方言一样,懂比利时法语的人肯定也懂法国的标准法语,这是个非常自然的需求。所以,资源提取的完整最佳策略应该是这样的:
            当程序请求资源时,只需要输入一个资源ID参数,运行时库首先使用用户语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果不成功,就把用户语言ID的主语言ID与请求的资源ID所拥有的所有语言ID的主语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的主语言ID里面子语言ID最小的那个语言ID对应的资源返回;如果不成功,则返回主语言ID为0且子语言ID也为0的资源;如果没找到,再使用系统语言ID与请求的资源ID所拥有的所有语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的语言ID对应的资源返回;如果不成功,就把系统语言ID的主语言ID与请求的资源ID所拥有的所有语言ID的主语言ID进行匹配,如果成功,就把请求的资源ID和匹配成功的主语言ID里面子语言ID最小的那个语言ID对应的资源返回;如果还不成功,则把请求的资源ID所拥有的所有语言ID中ID值最小的那个对应的资源返回。我已经竭尽毕生才华企图让阿甘都能看懂了,如果还看不懂,就洗洗睡吧,不求甚解才是真正的幸福。
            好吧,终极对决如期而至。这么屌暴天的需求怎么优雅地实现呢?翻阅MSDN上所有关于多国语言资源方面的资料,发现一套修改资源的API:BeginUpdateResource, UpdateResource和EndUpdateResource,可以修改资源的语言ID,但还是太复杂,严重损坏VB6的简单美形象。换一个思路,既然改资源那么累,能不能改用户语言呢?又发现了这么一个函数SetLocaleInfo,可以设置用户语言。哈哈,这样的话,大体思路就出来了:程序启动后,首先调用一个调整函数:这个函数首先获取用户语言,与已有的资源语言比对,如果有完全匹配的,就可以退出了;如果没有完全匹配的,再使用用户语言的主语言与已有的资源语言的主语言比对,如果有匹配的,就用SetLocaleInfo把用户语言设置为匹配了主语言的那个语言ID。这样,资源里只需提供一种主语言的标准语言即可支持使用这个主语言的所有国家。系统语言的修改非常麻烦,要调用一系列API,最致命的是需要重启操作系统,这个基本上就放弃了。但也无大碍,因为用户语言才是最重要的依据,匹配到系统语言上多少有点掩耳盗铃的感觉。
            但是,SetLocaleInfo可是真真切切地修改了用户语言,即使你退出前再把原来的用户语言改回去,也会影响到其它在你之后启动的应用,更何况你的程序有可能崩溃,连改回去的机会都没有。
            再经过仔细搜索,又发现这么一个函数SetThreadLocale,参数更简单,最重要的是其修改的语言信息只在本线程内起作用,并不真正地修改用户语言。这下大家满足了吧!
            有意见,请加群3867100讨论,口令:图乃大。或发邮件45672463@qq.com,标题注明图乃大。
    展开全文
  • 1.调试运行的时候总是显示VB程序未响应,很卡,然后选择——调试,也找到解决方法,只能结束进程。很受打扰,这里我们以VB6.0企业版为例,具体流程参考如下: WIN10兼容问题:Win10装VB6.0企业版怎么办 我在...

    最近在敲学生的过程中,在调试阶段遇到了这些问题,总结如下:
    1.调试运行的时候总是显示VB程序未响应,很卡,然后选择——调试,也找不到解决方法,只能结束进程。很受打扰,这里我们以VB6.0企业版为例,具体流程参考如下:
    WIN10兼容问题:Win10装不上VB6.0企业版怎么办
    我在安装过程中遇到路径问题,有以下几种:
    1.网上建议不要安装到C盘,我的默认路径是D盘(移动硬盘),然后我首先尝试的是安装到D盘,出现以下问题:(进度条很慢,安装失败)
    这里写图片描述

    这里写图片描述
    进度条很慢,为5到10分钟的样子吧,最后显示安装失败了。
    然后自己尝试安装到C盘,与VB安装包在一个文件夹下。出现以下情况:
    这里写图片描述
    失败原因:
    师傅建议的改进方案(成功了的):安装到C盘,新建一个文件夹,专门用来装VB.exe,
    这里写图片描述

    然后就是按照上面的链接指示的往下进行。
    到了如下图所示的步骤时:
    这里写图片描述
    我是没有出现【自定义安装】的提示的,就没有来到这个界面,原因是前一步的安装路径的问题没有解决好。后来在师傅的指导下将VB.exe安装到了C盘,就出现了自定义和之后的一系列流程界面。
    安装的过程中没有进度条显示安装进度,这个过程大概持续了十几分钟的样子,就只有一个蓝色的滚动环一直在运行,显示正在安装更新。这个时候我们可以到保存的路径下,查看是否安装成功了。
    运行VB.EXE,出现——找不到文件DAO350.DLL
    这里写图片描述
    然后可以百度搜索下载DAO350.DLL,参考如下流程
    Visual Basic 6.0找不到文件dao350.dll解决方法
    我尝试了几种下载网站,分别为太平洋下载中心,华军软件园,pc6下载站等等,都没有成功,要么是空的,要么只是一个其他捆绑的压缩包
    这里写图片描述
    这里写图片描述
    最后,终于找到了一个正确的下载网站:
    多多软件站(http://www.ddooo.com/softdown/24426.htm#dltab)
    这里写图片描述
    这里写图片描述
    安装后如下所示:
    这里写图片描述
    然后将红色矩形框标红的DAO350.DLL拷贝到自己的VB.exe的文件夹下,出现了如下情况:
    这里写图片描述
    然后我就按照链接的流程,又拷贝到了C:\Windows\System32下面,出现的问题也是以上图片展示的那种。后来请师哥帮忙看了看,打开VB程序,vb6 右键 管理员身份运行。出现DLL不能注册的显示,师哥就关闭,重新打开,尝试了几次,就可以了。
    有此种问题的一些链接,分享给大家:
    win10如何安装VB6.0企业版](https://jingyan.baidu.com/article/5d368d1ec968c83f61c05741.html)
    VB出现找不到”DAO350.DLL”错误
    VB启动显示不能加载dao350.dll错误(http://blog.csdn.net/bennyfun79/article/details/4287929)
    不能注册DLL/OCX:Regsvr32失败的解决办法(https://jingyan.baidu.com/article/aa6a2c14dc1e640d4d19c456.html)

    思考:
    问过其他同学,很少有人会像我一样,出现这么多问题吧,这事呢,得分两种思考模式:第一种,消极思维(固定性思维):我去,这么多问题,先自己试着解决吧,一个番茄,解决不了,每一步都出现问题,自己又没弄过,问身边的人,大家没有出现过这些问题啊,怎么办?整个思路都是乱的,不想弄,不想弄啊!
    第二种,绿灯思维,(成长型思维):太好了,又可以学习很多东西了,大家都没有遇到这么多问题,如果我能解决掉,不就比别人多了很多实践的经验吗》?下次等其他人再遇到一样的问题的时候,我也能帮别人去解决了!
    自我感悟:今天突然想到一个很有意思的事情:
    1.任何一件事,一个人,一份工作,一份感情,都是需要经历从陌生——了解——熟悉——自己思考,总结,创新的过程。每一个阶段,都是难熬的,离开舒适区,不是我们去选择不舒服的方式,而是这种不舒服的状态是持续贯穿在人生的各个阶段的,而每一个阶段的舒适区只占很小的一部分,就看你是想选择沉溺于小的舒适区,还是去面对人生的挑战和挫折了!
    2.努力与辛苦都是廉价的,但是格局决定了同龄人之间的差距
    3.所有的光环,都是属于有执行力的人

    展开全文
  • 网上很少有用VB写的压缩文件的代码,但是,在网络传输,文件下载,打包发布等等方面的需求又比较多,所以,借鉴了一下C#代码的例子,改造成了VB用的类。另外加上了多层文件夹压缩解压。但是,因为时间有限,只是将...

    网上很少有用VB写的压缩文件的代码,但是,在网络传输,文件下载,打包发布等等方面的需求又比较多,所以,借鉴了一下C#代码的例子,改造成了VB用的类。另外加上了多层文件夹压缩解压。但是,因为时间有限,只是将文件全部读取到缓存处理,所以,针对大文件没有做特别的处理。例子里面有提示,根据需要自己改动一下吧。

    文件:n459.com/file/25127180-478678624

    以下内容无关:

    -------------------------------------------分割线---------------------------------------------

    在日常开发中,为了保证数据的一致性,我们一般都选择关系型数据库来存储数据,如 MySQL,Oracle 等,因为关系型数据库有着事务的特性。然而在并发量比较大的业务场景,关系型数据库却又往往会成为系统瓶颈,无法完全满足我们的需求,所以就需要使用到缓存,而非关系型数据库,即 NoSQL 数据库往往又会成为最佳选择。

    NoSQL 数据库最常见的解释是 non-relational,也有人解释为 Not Only SQL。非关系型数据库不保证事务,也就是不具备事务 ACID 特性,这也是非关系型数据库和关系型数据库最大的区别,而我们即将介绍的 Redis 就属于 NoSQL 数据库的一种。

    什么是 Redis
    Redis 全称是:REmote DIctionary Service,即远程字典服务。Redis 是一个开源的(遵守 BSD 协议)、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。
    Redis 具有以下特性:

    1、支持丰富的数据类型:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets),位图等。
    2、功能丰富:提供了持久化机制,过期策略,订阅/发布等功能。
    3、高性能,高可用且支持集群。
    4、提供了多种语言的 API。
    Redis 的安装
    1、下载对应版本的安装包,如:Redis 5.0.5 版本,其他版本也可以点击这里进行下载。
    2、下载好之后传到服务器指定目录,执行命令 tar -zxvf redis-5.0.5.tar.gz 进行解压。
    3、解压成功之后,进入 Redis 主目录,执行命令 make && make install PREFIX=/xxx/xxx/redis-5.0.5 进行安装,如果不指定目录,则默认是安装在 /usr/local 目录下。
    4、安装成功之后可以看到 Redis 主目录下多了一个 bin 目录,bin 目录内包含了一些可执行脚本。
    5、回到 Redis 主目录下,找到 redis.conf 配置文件,将其中的配置 daemonize no 修改为 daemonize yes,表示在后台启动服务。
    6、然后就可以执行命令 /xxx/xxx/redis-5.0.5/bin/redis-server /xxx/xxx/redis-5.0.5/redis.conf 启动 Redis 服务。
    Redis 到底有多快
    大家可能都知道 Redis 很快,可是 Redis 到底能有多快呢,比如 Redis 的吞吐量能达到多少?我想这就不是每一个人都能说的上来一个具体的数字了。

    Redis 官方提供了一个测试脚本,可以供我们测试 Redis 的 吞吐量。

    redis-benchmark -q -n 100000 可以测试常用命令的吞吐量。
    redis-benchmark -t set,lpush -n 100000 -q 测试 Redis 处理 set 和 lpush 命令的吞吐量。
    redis-benchmark -n 100000 -q script load “redis.call(‘set’,‘foo’,‘bar’)” 测试 Redis 处理 Lua 脚本等吞吐量。
    下图就是我这边执行第一条命令的自测结果,可以看到大部分命令的吞吐量都可以达到 4 万以上,也就是说每秒钟可以处理 4 万次以上请求:

    但是如果你以为这就是 Redis 的真实吞吐量,那就错了。实际上,Redis 官方的测试结果是可以达到 10 万的吞吐量,下图就是官方提供的一个基准测试结果(纵坐标就是吞吐量,横坐标是连接数):

    Redis 是单线程还是多线程
    这个问题比较经典,因为在很多人的认知里,Redis 就是单线程的。然而 Redis 从 4.0 版本开始就有了多线程的概念,虽然处理命令请求的核心模块确实是保证了单线程执行,然而在其他许多地方已经有了多线程,比如:在后台删除对象,通过 Redis 模块实现阻塞命令,生成 dump 文件,以及 6.0 版本中网络 I/O 实现了多线程等,而且在未来 Redis 应该会有越来越多的模块实现多线程。

    所谓的单线程,只是说 Redis 的处理客户端的请求(即执行命令)时,是单线程去执行的,并不是说整个 Redis 都是单线程。

    Redis 为什么选择使用单线程来执行请求
    Redis 为什么会选择使用单线程呢?这是因为 CPU 成为 Redis 瓶颈的情况并不常见,成为 Redis 瓶颈的通常是内存或网络带宽。例如,在一个普通的 Linux 系统上使用 pipelining 命令,Redis 可以每秒完成 100 万个请求,所以如果我们的应用程序主要使用 O(N) 或 O(log(N)) 复杂度的命令,它几乎不会使用太多的 CPU。

    那么既然 CPU 不会成为瓶颈,理所当然的就没必要去使用多线程来执行命令,我们需要明确的一个问题就是多线程一定比单线程快吗?答案是不一定。因为多线程也是有代价的,最直接的两个代价就是线程的创建和销毁线程(当然可以通过线程池来一定程度的减少频繁的创建线程和销毁线程)以及线程的上下文切换。

    在我们的日常系统中,主要可以区分为两种:CPU 密集型 和 IO 密集型。

    CPU 密集型:这种系统就说明 CPU 的利用率很高,那么使用多线程反而会增加上下文切换而带来额外的开销,所以使用多线程效率可能会不升反降。举个例子:假如你现在在干活,你一直不停的在做一件事,需要 1 分钟可以做完,但是你中途总是被人打断,需要花 1 秒钟时间步行到旁边去做另一件事,假如这件事也需要 1 分钟,那么你因为反复切换做两件事,每切换一次就要花 1 秒钟,最后做完这 2 件事的时间肯定大于 2 分钟(取决于中途切换的次数),但是如果中途不被打断,你做完一件事再去做另一件事,那么你最多只需要切换 1 次,也就是 2 分 1 秒就能做完。
    IO 密集型:IO 操作也可以分为磁盘 IO 和网络 IO 等操作。大部分 IO 操作的特点是比较耗时且 CPU 利用率不高,所以 Redis 6.0 版本网络 IO 会改进为多线程。至于磁盘 IO,因为 Redis 中的数据都存储在内存(也可以持久化),所以并不会过多的涉及到磁盘操作。举个例子:假如你现在给树苗浇水,你每浇完一次水之后就需要等别人给你加水之后你才能继续浇,那么假如这个等待过程需要 5 秒钟,也就是说你浇完一次水就可以休息 5 秒钟,而你切换去做另一件事来回只需要 2 秒,那么你完全可以先去做另一件事,做完之后再回来,这样就可以充分利用你空闲的 5 秒钟时间,从而提升了效率。
    使用多线程还会带来一个问题就是数据的安全性,所以多线程编程都会涉及到锁竞争,由此也会带来额外的开销。

    什么是 I/O 多路复用
    I/O 指的是网络 I/O, 多路指的是多个 TCP 连接(如 Socket),复用指的是复用一个或多个线程。I/O 多路复用的核心原理就是不再由应用程序自己来监听连接,而是由服务器内核替应用程序监听。

    在 Redis 中,其多路复用有多种实现,如:select,epoll,evport,kqueue 等。

    我们用去餐厅吃饭为的例子来解释一下 I/O 多路复用机制(点餐人相当于客户端,餐厅的厨房相当于服务器,厨师就是线程)。

    阻塞 IO:张三去餐厅吃饭,点了一道菜,这时候他啥事也不干了,就是一直等,等到厨师炒好菜,他就把菜端走开始吃饭了。也就是在菜被炒好之前,张三被阻塞了,这就是 BIO(阻塞 IO),效率会非常低下。
    非阻塞 IO:张三去餐厅吃饭,点了一道菜,这时候张三他不会一直等,找了个位置坐下,刷刷抖音,打打电话,做点其他事,然后每隔一段时间就去厨房问一下自己的菜好了没有。这种就属于非阻塞 IO,这种方式虽然可以提高性能,但是如果有大量 IO 都来定期轮询,也会给服务器造成非常大的负担。
    事件驱动机制:张三去餐厅吃饭,点了一道菜,这时候他找了个位置坐下来等:
    厨房那边菜做好了就会把菜端出来了,但是并不知道这道菜是谁的,于是就挨个询问顾客,这就是多路复用中的 select 模型,不过 select 模型最多只能监听 1024 个 socket(poll 模型解决了这个限制问题)。
    厨房做好了菜直接把菜放在窗口上,大喊一声,某某菜做好了,是谁的快过来拿,这时候听到通知的人就会自己去拿,这就是多路复用中的 epoll 模型。
    需要注意的是在 IO 多路复用机制下,客户端可以阻塞也可以选择不阻塞(大部分场景下是阻塞 IO),这个要具体情况具体分析,但是在多路复用机制下,服务端就可以通过多线程(上面示例中可以多几个厨师同时炒菜)来提升并发效率。

    Redis 中 I/O 多路复用的应用
    Redis 服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件和时间事件。

    文件事件:Redis 服务器和客户端(或其他服务器)进行通信会产生相应的文件事件,然后服务器通过监听并处理这些事件来完成一系列的通信操作。
    时间事件:Redis 内部的一些在给定时间之内需要进行的操作。
    Redis 的文件事件处理器以单线程的方式运行,其内部使用了 I/O 多路复用程序来同时监听多个套接字(Socket)连接,提升了性能的同时又保持了内部单线程设计的简单性。下图就是文件事件处理器的示意图:

    I/O 多路复用程序虽然会同时监听多个 Socket 连接,但是其会将监听的 Socket 都放到一个队列里面,然后通过这个队列有序的,同步的将每个 Socket 对应的事件传送给文件事件分派器,再由文件事件分派器分派给对应的事件处理器进行处理,只有当一个 Socket 所对应的事件被处理完毕之后,I/O多路复用程序才会继续向文件事件分派器传送下一个 Socket 所对应的事件,这也可以验证上面的结论,处理客户端的命令请求是单线程的方式逐个处理,但是事件处理器内并不是只有一个线程。

    Redis 为什么这么快
    Redis 为什么这么快的原因前面已经基本提到了,现在我们再进行总结一下:

    1、Redis 是一款纯内存结构,避免了磁盘 I/O 等耗时操作。
    2、Redis 命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。
    3、采用了 I/O 多路复用机制,大大提升了并发效率。

    展开全文
  • vb数据类型(很多程序出问题出在这个,一定要看,VB msdn说的太对) VB可用的AES加密sqlite_odbc 及 cairo_sqlite (VBRichClient自带的非odbc连接) 有vbRichClient代替winsock、实现vb多线程及远程调用activeX等
  • 数据库课程设计-KTV点歌系统VB.net 窗体,MySQL5.5) A 目录 *引言* 《数据库系统课程设计》是计算机学院的实践课程。在较为系统地学完《数据库系统》后,通过此课程设计,一方面可以增强对数据库的理解;另一...
  • 祝你考试成功2003年9月全国计算机等级考试二级VB语言笔试试卷 (含参考答案) (考试时间90分钟,满分100分) 一、 选择题((1)~(20)每小题2分,(21)~(30)每小...(4)以下不属于Visua l Basic系统文件类型
  • vb习题集给学生.doc

    2020-11-11 18:31:08
    以下不属于Visual Basic系统文件类型是 A.frm B.bat C.vbg D.vbp 3. 以下叙述中错误的是 A打开一个工程文件时系统自动装入与该工程有关的窗体标准模块等文件 B保存Visual Basic程序时应分别保存窗体
  • VB应用程序对系统配置参数的确定

    千次阅读 2001-04-30 12:57:00
    VB5应用程序对系统配置参数的确定 对于程序员而言,了解系统配置的情况对应用程序的开发具有重要的意义。在开发诸如多媒体应用、图形软件等与系统配置密切相关的软件时,由于用户机器配置不尽相同,所以,由软件在...
  • VB基础

    万次阅读 多人点赞 2008-03-06 09:52:00
    VB入门1.1 知识要点1.VB的特点、安装和启动了解VB面向对象、可视化、事件驱动的特点。2.VB集成开发环境初学者主要掌握菜单栏、工具栏、工具箱窗口、属性窗口、代码窗口、工程资源管理器窗口的使用。3.VB对象的...
  • VB调用DLL

    2015-05-13 13:59:15
    但是,并是所有的32位动态库都能被VB生成的exe 文件正确地识别。 一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题:  1、生成动态库时要使用__stdcall调用约定,而能使用...
  • 以下不属于Visual Basic系统文件类型是 A.frm B.bat C.vbg D.vbp 3. 以下叙述中错误的是 A打开一个工程文件时系统自动装入与该工程有关的窗体标准模块等文件 B保存Visual Basic程序时应分别保存窗体
  • VB从服务器获取数据库 内容精选换一换在GaussDB(DWS)数据库中创建一个Hadoop外表,用来访问存储在MRS HDFS文件系统上的Hadoop结构化数据。Hadoop外表是只读的,只能用于查询操作,可直接使用SELECT查询其数据。您...
  • 下面是小编整理的vb试题及其参考答案,欢迎阅读!vb试题及其参考答案1.在代码中引用一个控件时,应使用控件的( b )属性。A.Caption B.Name C.Text D.Index2.设变量x = 4,y = -1,a = 7,b = -8,下面表达式( a )的值...
  • VB函数

    千次阅读 2008-09-19 13:19:00
    Calendar 常数 可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbCalGreg 0 指出使用的是阳历。 vbCalHijri 1 指出使用的是伊斯兰历法。 -------------------------------------------------------------...
  • http://cnprogram.myrice.com/article/vb/vb396.html 程联盟--技术文章 VB 程序大揭秘 1.Visual Basic程序概况 我用W32Dasm(Ver 8.93)解开一个比较复杂的VB程序,其中用到了许多API 函数比如...
  • vb+数据库上传到远程服务器 内容精选换一换华为云帮助...当前仅支持x86计算类型的服务器,暂支持鲲鹏计算类型的服务器。用户需要启用数据库备份前,需先在弹性云服务器上更改安全组和安装客户端。本章节指导用户下...
  • VB 属性集

    千次阅读 2009-07-03 17:26:00
    内 部 控 件 控件在VB程序设计中扮演重要的角色,它是VB程序的基本组成部分。合理恰当地使用各种不同的控件,以及熟练掌握各个控件的属性设置,是进行VB程序设计的基础。另外控件应用的好坏直接影响应用程序界面的...
  • vb.net面试Here are 45+ frequently asked VB.Net interview questions and answers which will definitely help you out to crack one of the toughest interviews. 这里有45多个VB.Net面试常见问题和答案,这些...
  • VB.NET Declare语句

    千次阅读 2015-12-20 13:31:03
    本文向大家介绍VB.NET Declare语句,可能好多人还了解VB.NET Declare语句,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。  要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分...
  • VB导出Excel

    千次阅读 热门讨论 2014-01-26 20:58:21
    2,这是excel与vb的结合使用,由于VB与EXCEL由于分别属于不同的应用系统对于我来说是一个挑战; 3,是一个新的知识点。  我主要在写代码的时候,主要先了解了vb与Excel之间的关系。后来在完成了代码,其
  • VB函数大全

    万次阅读 2012-03-14 15:50:36
    VB函数大全  Calendar 常数 可在代码中的任何地方用下列常数代替实际值: 常数 值 描述 vbCalGreg 0 指出使用的是阳历。 vbCalHijri 1 指出使用的是伊斯兰历法。 -----------------------------------...
  • Windows 系统中的文件路径格式

    千次阅读 2019-05-17 23:10:00
    title: Windows 系统中的文件路径格式 ms.date: 06/28/2018 ms.technology: dotnet-standard dev_langs: csharp vb helpviewer_keywords: I/O, long paths long paths path formats, Windows author: ...
  • VB课程设计俄罗斯方块

    热门讨论 2011-02-25 10:46:55
    它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。《俄罗斯方块》举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和...
  • VB6.0使用汇总一

    2019-04-04 20:19:50
    目录: 一、软件的下载与安装 ...1、VB输出可执行文件或安装包 2、ComboBox 控件的使用 3、MsComm串口控件 1)MsComm控件的添加 2)MsComm控件的事件及基本属性 4、添加引用无“Microsoft Excel **...
  • 《大学VB考试题库》由会员分享,可在线阅读,更多相关《大学VB考试题库(77页珍藏版)》请在人人文库网上搜索。1、大学VB考试题库一、单项选择问题1.与传统编程语言相比,Visual Basic最突出的特点是()。a、结构化编程...
  • VB文本加密 特别设计到中文加密 让很多人费尽周折,经常会碰到解密中文出现乱码的情况下面这篇文章将对此做了说明计算机世界2000年第36期实现中文文本的加密方法武汉交通科技大学计算机科学与工程系 吴业福本文介绍了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,830
精华内容 3,532
关键字:

以下不属于vb系统的文件类型