VB学习——各种 文件 相关的知识

选择文件

① 使用CommonDialog部件

引用Microsoft Common Dialog Control 6.0(SP6)部件 

 ②添加CommonDialog控件


③创建一个ListView,命名为LV_FilePath

 文件多选

'文件多选

Public WshShell As New WshShell

    Dim filePos As Integer, FileName As String
    Dim FilePath As String
    Dim arr() As String
2   CommonDialog1.DialogTitle = "选择TxT文件"
3   CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer    '多选
4   CommonDialog1.Filter = "TxT文件(*.txt)|*.txt|所有文件(*.*)|*.*"
5   CommonDialog1.FilterIndex = 0
6   CommonDialog1.InitDir = WshShell.SpecialFolders("desktop")
7   CommonDialog1.ShowOpen
8   FilePath = CommonDialog1.FileName
9   If FilePath = "" Then Exit Sub    '没有选取文件则退出
10  arr = Split(FilePath, Chr(0))
11  If UBound(arr) >= 1 Then
12      For mm = 1 To UBound(arr)
13          Set itmX = LV_FilePath.ListItems.Add(, , arr(mm))
14          itmX.SubItems(1) = arr(0) & "\" & arr(mm)
15      Next
16  Else
17      filePos = InStrRev(FilePath, "\", , vbTextCompare)
18      If filePos > 2 Then
19          FileName = Right(FilePath, Len(FilePath) - filePos)    '截取文件名字
20      End If
21      Set itmX = LV_FilePath.ListItems.Add(, , FileName)
22      itmX.SubItems(1) = FilePath
23  End If

24  Frame3.Caption = "文件列表 共:" & LV_FilePath.ListItems.Count 

 文件单选

'文件单选

Public WshShell As New WshShell
    Dim filePos As Integer, FileName As String
    Dim FilePath As String
    Dim arr() As String
2   CommonDialog1.DialogTitle = "选择TxT文件"
4   CommonDialog1.Filter = "TxT文件(*.txt)|*.txt|所有文件(*.*)|*.*"
5   CommonDialog1.FilterIndex = 0
6   CommonDialog1.InitDir = WshShell.SpecialFolders("desktop")
7   CommonDialog1.ShowOpen
8   FilePath = CommonDialog1.FileName
9   If FilePath = "" Then Exit Sub    '没有选取文件则退出


    filePos = InStrRev(FilePath, "\", , vbTextCompare)
    If filePos > 2 Then
         FileName = Right(FilePath, Len(FilePath) - filePos)    '截取文件名字
    End If

    Set itmX = LV_FilePath.ListItems.Add(, , FileName)
    itmX.SubItems(1) = FilePath
    Frame3.Caption = "文件列表 共:" & LV_FilePath.ListItems.Count 

其他方法选择文件(夹)

Public Const MAX_PATH = 260
Public Const INVALID_HANDLE_VALUE = -1
Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
Public Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
   dwFileAttributes As Long
   ftCreationTime As FILETIME
   ftLastAccessTime As FILETIME
   ftLastWriteTime As FILETIME
   nFileSizeHigh As Long
   nFileSizeLow As Long
   dwReserved0 As Long
   dwReserved1 As Long
   cFileName As String * MAX_PATH
   cAlternate As String * 14
End Type

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long


'---------------------------------------------------------------------------------------
' Module    : ModuleFile
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 文件相关操作模块
' Function  : 1、选取文件夹
'---------------------------------------------------------------------------------------
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
Const BIF_RETURNONLYFSDIRS = 1
Const BIF_NEWDIALOGSTYLE = &H40
Const BIF_EDITBOX = &H10
Const BIF_USENEWUI = BIF_NEWDIALOGSTYLE Or BIF_EDITBOX

Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'---------------------------------------------------------------------------------------
' Procedure : BrowseForFolder
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 选取文件夹(不含新建文件夹指令) 返回BrowseForFolder
'---------------------------------------------------------------------------------------
Public Function BrowseForFolder(Optional sTitle As String = "请选择文件夹") As String
    Dim iNull As Integer, lpIDList As Long, lResult As Long
    Dim sPath As String, udtBI As BrowseInfo
1   On Error GoTo Err_BrowseForFolder
    '-------------------------------------
2   With udtBI
3       .hWndOwner = 0    ' Me.hWnd
4       .lpszTitle = lstrcat(sTitle, "")
5       .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI
6   End With
7   lpIDList = SHBrowseForFolder(udtBI)
8   If lpIDList Then
9       sPath = String$(MAX_PATH, 0)
10      SHGetPathFromIDList lpIDList, sPath
11      CoTaskMemFree lpIDList
12      iNull = InStr(sPath, vbNullChar)
13      If iNull Then
14          sPath = Left$(sPath, iNull - 1)
15      End If
16  End If
17  BrowseForFolder = sPath
    '-------------------------------------
18  On Error GoTo 0
19  Exit Function
Err_BrowseForFolder:
20  If MsgBox("【错误代码】:" & Err.Number & vbCrLf & "【错误描述】:" & Err.Description & vbCrLf & "【出错位置】: [FunctionAll]→ [BrowseForFolder]的 " & Erl & "行" & vbCrLf & "是否继续?", vbYesNo + vbQuestion + vbDefaultButton1 + vbMsgBoxSetForeground, "错误处理") = vbYes Then Resume Next
End Function


Public Function FindFiles(strRootFolder As String, fileType As String, ByRef fileArr() As ChoFile)

    Dim lngSearchHandle As Long
    Dim udtFindData As WIN32_FIND_DATA
    Dim strTemp As String, lngRet As Long
    Dim itmX As ListItem
    Dim arr() As String
    Dim mm As Integer, isFindFileType As Boolean
    '检测文件夹是否有 \
1   On Error GoTo Err_FindFiles
    '-------------------------------------
3   If Right$(strRootFolder, 1) <> "\" Then strRootFolder = strRootFolder & "\"

    '给出第一个文件句柄
4   lngSearchHandle = FindFirstFile(strRootFolder & "*", udtFindData)

    '如果无效时退出
5   If lngSearchHandle = INVALID_HANDLE_VALUE Then Exit Function

6   lngRet = 1

7   Do While lngRet <> 0

        '去掉空格
8       strTemp = TrimNulls(udtFindData.cFileName)

9       If (udtFindData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
            '为目录时
            '不等于.或..时
10          If strTemp <> "." And strTemp <> ".." Then
11              Call FindFiles(strRootFolder & strTemp, fileType, fileArr)
12          End If
13      Else
            '为文件时
14          isFindFileType = False
15          arr = Split(fileType, ",")
16          For mm = 0 To UBound(arr)
17              If InStr(UCase(strTemp), UCase(arr(mm))) Then
18                  isFindFileType = True: Exit For
19              End If
20          Next

21          If isFindFileType Then

22              If fileArr(0).FName = "" Then
23                  fileArr(0).FName = strTemp
24                  fileArr(0).FPath = strRootFolder & strTemp
25              Else
26                  ReDim Preserve fileArr(UBound(fileArr) + 1) As ChoFile
27                  fileArr(UBound(fileArr)).FName = strTemp
28                  fileArr(UBound(fileArr)).FPath = strRootFolder & strTemp
29              End If
30          End If
31      End If

        '给出下一个文件或目录句柄
32      lngRet = FindNextFile(lngSearchHandle, udtFindData)

33  Loop

34  Call FindClose(lngSearchHandle)
    '-------------------------------------
35  On Error GoTo 0
36  Exit Function
Err_FindFiles:
37  If MsgBox("【错误代码】:" & Err.Number & vbCrLf & "【错误描述】:" & Err.Description & vbCrLf & "【出错位置】: [modFindFile]→ [FindFiles]的 " & Erl & "行" & vbCrLf & "是否继续?", vbYesNo + vbQuestion + vbDefaultButton1 + vbMsgBoxSetForeground, "错误处理") = vbYes Then Resume Next

End Function

Public Function TrimNulls(strString As String) As String
   
   Dim l As Long
   
   l = InStr(1, strString, Chr(0))
   
   If l = 1 Then
      TrimNulls = ""
   ElseIf l > 0 Then
      TrimNulls = Left$(strString, l - 1)
   Else
      TrimNulls = strString
   End If
   
End Function

顺序文件、随机文件、二进制文件 读写

(一)打开和关闭文件  
    1、顺序文件  
    打开顺序文件,我们可以使用Open语句。它的格式如下:  
  Open   pathname   For   [Input   |Output   |Append]   As   [#]filenumber   [Len   =   buffersize]    
    说明:  
    (1)参数pathname   表示要打开的文件名,文件名可以包含有驱动器和目录  
    (2)Input   Output   和Append用于设置顺序文件的打开方式。其中,Input表示从打开的文件中读取数据。以这种方式打开文件时,文件必须存在,否则会产生错误Output表示向打开的文件中写入数据。以这种方式打开文件时,文件中原有的数据将被覆盖,新的数据将从文件开始写入。如果文件不存在,则创建一个新文件。Append表示向打开的文件中添加数据。以这种方式打开时,文件中原有的数据将被保留,新的数据将从文件为开始添加。如果文件不存在,则创建一个新文件。  
    (3)As[#]filenumber   子句用于为打开的文件指定文件号.对文件进行读写操作时,要用文件号表示该文件.文件号是介于1~511之间的整数,既可以是数字,又可以是变量.也可以省略不用.  
    (4)当在文件与程序之间拷贝数据时,Len=buffersize子句指定缓冲区的字符数.  
    例如:  
  Open   App.Path   +   "/test.dat"   For   Output   As   1  
  Open   App.Path   +   "/test.dat"   For   Output   As   1    
    这两句代码在当前应用程序所在目录下创建了一个名为test.dat的文本文件,分配文件号为1.  
  Open   App.Path   +   "/test.dat"   For   Input   As   [#]filenumber    
    这条语句是从文本文件中读取数据.  
  Open   App.Path   +   "/test.dat"   For   Append   As   [#]filenumber    
    这条语句则是像文本文件中添加数据  

'创建一个顺序文件
Private Sub Command1_Click()
Open App.Path + "\aa.txt" For Output As #1     '创建一个顺序文件
Print #1, "正在学习Visual Basic 6.0 ", 123.45, Date, True    '用Print语句对文件写操作
Write #1, "正在学习Visual Basic 6.0 ", 123.45, Date, True    '用Write语句对文件写操作
Print #1, "正在学习Visual Basic 6.0 "; 123.45; Date; False   '不同间隔符,效果不同
Write #1, "正在学习Visual Basic 6.0 "; 123.45; Date; False
Close #1    '关闭文件
End Sub


'顺序文件——读
Private Sub Command1_Click()  '方法一
Dim s As String
Text1 = ""
Open App.Path + "\aa.txt" For Input As #1  '打开文件
Do While Not EOF(1)              '从头到尾
   Line Input #1, s              '一行一行读取文件
   Text1 = Text1 & s & vbCrLf    '放到文本框中显示
Loop
Close #1                         '关闭文件
End Sub

Private Sub Command2_Click() '方法二
Text1 = ""
Open App.Path + "\bb.txt" For Input As #1  '打开文件
Text1 = Input(LOF(1), 1)    '一次性读入文本框 (弊端:不能读太多,容易报错超出文件尾)
Close #1                    '关闭文件
End Sub

Private Sub Command3_Click() '方法三
Dim s As String
Text1 = ""
Open App.Path + "\cc.txt" For Input As #1  '打开文件
Do While Not EOF(1)
 s = Input(1, #1)      '一个字符一个字符读取
 Text1 = Text1 & s     '依次放入文本框
Loop
Close #1               '关闭文件
End Sub


'顺序文件——写
Private Sub Command1_Click()   '用Print语句把数据写入文件
Open App.Path + "\aa.txt" For Output As #1   '打开文件
 Print #1, "VB Test"                  '依次写入顺序文件
 Print #1, Spc(5); "好好学习"
 Print #1, Tab(10); "天天向上"
 Close #1        '关闭文件
End Sub

Private Sub Command2_Click()   ' 把文件的内容一次性的写入
Open App.Path + "\bb.txt" For Output As #1  '打开文件
Print #1, Text1.Text     '文本框内容全部写入
Close #1
End Sub

Private Sub Command3_Click()
Open App.Path + "\cc.txt" For Output As #1 '打开文件
For i = 1 To Len(Text1)              '利用循环
  Print #1, Mid(Text1.Text, i, 1);   '一个字符一个字符地写入文件
Next i
Close #1                             '关闭文件
End Sub


    2、随机文件  
    操作随机文件之前,首先必须定义用于保存数据项的记录类型.该记录是用户自定义数据类型,他们是随机文件中存储数据的基本结构.例如:  
  Type   Student  
   No   As   Integer  
   Name   As   String   *   20  
   age   As   Integer  
  End   Type  
  Dim   Stud   As   Student   ‘定义一个可以存放学生材料的变量    
    随机文件中,所有的数据都将保存到若干个结构为Student类型的记录中,   而从随机文件中读出的数据则可以存放到变量Stud中.  
    之后我们就可以打开并读写文件了.下面是打开随机文件的语法格式:  
  Open   filename   For   Random   as   [#]filenumber   Len   =   Reclength    
    说明:  
    (1)参数filename   和filenumber   分别表示文件名或文件号.  
    (2)关键字Random   表示打开的是随机文件  
    (3)Len子句用于设置记录长度,长度由参数Reclength指定.Reclength的值必须大于0,而且必须与定义的记录结构的长度一致.计算记录长度的方法是将记录结构中每个元素的长度相加.例如前面声明的Student的长度应该是2+20+2=24字节.  
    打开一个记录类型为Student   的随机文件的方法是:  
  Open   "c:/Student.txt   "   For   Random   As   #1   Len   =   25    

Option Base 1
Private Type stu       '自定义数据类型
  name As String * 8   '姓名
  sex As Boolean       '性别
  birth As Date        '出生日期
  score(1 To 2) As Integer  '成绩单
End Type
Private Sub Command1_Click()
Dim s(2) As stu
Open App.Path + "\ss.dat" For Random As #1 Len = Len(s(1)) '打开文件
s(1).name = "张硒"        '先赋初值
s(1).sex = True
s(1).birth = #3/6/1982#
s(1).score(1) = 88
s(1).score(2) = 92

s(2).name = "王永民"         '数组元素赋初值
s(2).sex = False
s(2).birth = #9/9/1982#
s(2).score(1) = 96
s(2).score(2) = 76

Put #1, 1, s(1)     '把数组元素写入随机文件
Put #1, 2, s(2)
Close 1             '关闭文件
End Sub

Private Sub Command2_Click()
Dim s As stu
Open App.Path + "\ss.dat" For Random As #1 Len = Len(s) '打开文件
Picture1.Print "姓名", "性别", "出生日期", "数学成绩", "语文成绩"
Get #1, , s             '读取随机文件的第一条记录
Picture1.Print s.name, IIf(s.sex, "男", "女"), s.birth, s.score(1), s.score(2) '打印显示
Get #1, , s             '读取随机文件的第二条记录
Picture1.Print s.name, IIf(s.sex, "男", "女"), s.birth, s.score(1), s.score(2) '打印显示
Close 1       '关闭文件
End Sub


    3、二进制文件  
    打开二进制文件的语法格式如下:  
  Open   pathname   For   Binary   As   [#]filenumber    
    说明:

(1)   参数filename   和filenumber   分别表示文件名或文件号.  
    (2)关键字Binary   表示打开的是二进制文件  
    (3)对于二进制文件,不能指定字节长度.每个打开的二进制文件都有一个自己的指针,文件指针是一个数字值,指向下一次读写操作的文件中的位置.二进制文件中的每个”位置”对应一个数据字节,因此,有n个字节的文件,就有1到n个位置.  
    我们可以用Seek()函数返回当前的文件指针位置(即下一个要读写的字节   );用Loc()函数返回上一次读写的字节位置,除非用Seek语句移动了指针,Loc()返回值总比Seek()的小1.我们来看下面的例子:  
  Open   “student.txt”   for   Binary   as   #1    
    该语句用二进制的方式打开了student.txt文件.

Private Sub Command1_Click()
Dim temp As Byte
Dim sfile As String, dfile As String '变量声明
Dim i As Long
sfile = Text1
dfile = Text2
Open sfile For Binary As #1  '打开源文件
Open dfile For Binary As #2  '打开目标文件
For i = 1 To LOF(1)
  Get #1, i, temp     '读文件
  Put #2, i, temp     '写文件
Next
Close   '全部关闭
End Sub

(二)读文件  
    1、顺序文件
 
    顺序文件的读取有三种方式:  
    (1)Line   Input   #   语句  
    该语句从打开的顺序文件中读取一行数据。这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。Line   Input   #   语句的语法格式如下:  
  Line   Input   #   文件号,变量号    
    说明:“文件号”是打开文件时所用的文件号;“变量号”使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。Input#   语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。该语句只能顺序的从第一个域开始,直到读取想要的域。  
    请看下面代码:  
  Dim   strLine   As   String  
  Open   "c:/vb/test.txt"   For   Input   As   #1  
  Do   Until   EOF(1)  
   Line   Input   #1,   strLine  
   text1.Text   =   text1.Text   +   strLine   +   Chr(13)   +   Chr(10)  
  Loop  
  Close   #1    
    此段代码逐行读取一个文件到文本框中。  
    (2)Input函数  
    此函数可以从顺序文件中一次读取指定长度的字符串。具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。Input函数可以读取包括换行符,回车符,空格符等在内的各种字符。下面是它的语法格式:  
    变量   =   Input(串长度,文件号)  
    例如,要从一个打开文件中读取12个字符并复制到变量file中,我们可以这样写:  
  file   =   Input(12,filenum)    
    如果要将整个文件复制到变量,请使用InputB函数将字节从文件复制到变量。由于InputB函数返回一个ASCII字符串,因此,必须用StrCopy函数将ASCII字符串转换为Unicode字符串。代码如下:  
  file   =   StrCopy   (Input   (LOF(filenanum),filenum),vbUnicode)  
    (3)Input   #   语句  
    Input   #语句可以从文件中同时向多个变量内读入数据,而且读入的数据可以是不同类型的。  
     
    下面使它的语法格式:  
  Input   #   文件号,变量列表    
    例如,我们要在文件student.txt中写入数据,下面是代码:
  Open   "student.txt"   For   Output   As   #filenum  
  Write   #filenum,   "张三",   "初一年级",   14  
  Write   #filenum,   "李四",   "职业高中",   18  
   
  Dim   name   As   String,   nianji   As   String,   age   As   Integer  
  Dim   name1   As   String,   nianji1   As   String,   age1   As   Integer  
  Open   "student.txt"   For   Input   As   #filenum  
  Input   #filenum,   name,   nianji,   age  
  Input   #filenum,   name1,   nianji1,   age1  
  Close   #filenum    
    执行结果:  
  name=”张三”   ,nianji   =   “初一年级”   ,age   =14    
  name=”李四”   ,nianji   =   “职业高中”   ,age   =18      
    2、随机文件  
    读取随机文件是可以使用Get   #   语句,数据从文件的一个指定记录中读出后,存入一个用户自定义的变量中.  
    语法格式:   Get   #   FileNum   ,[RecNum],UserType  
    说明:  
    (1)FileNum   是要打开的文件号;RecNum是要读取的记录号,若省略,则读取下一个记录  
    (2)UserType   是一个用来存放读出数据的用户自定义的数据类型变量.  
    下面是一个例子:  
  Get   #   1,5,Student      
    该语句读取文件号为1的文件中的第5条记录.  
    3、二进制文件  
    读写二进制文件的方法和读写随机文件的方法基本相同,下面是相关的语句格式及其说明:  
    格式:   Get   [#]fileNumber   ,[Pos],   Var  
    功能:   用二进制方式,从文件的中指定的位置开始读取,所给变量长度的数据  
    说明:  
    (1)FileNumber是以二进制方式打开的文件号.  
    (2)Pos用来指定读写操作发生时的字节位置,若省略,则使用当前文件指针位置.  
    (3)Var是用来存放读出的数据的变量.该语句会自动根据var变量包含的字节长度读取适当的文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.对于文件长度的判断我们可以使用Lof()函数,Eof()函数检查文件的结尾位置.  
    下面的代码复制studert.txt文件到student1.txt文件中  
  Dim   ar   As   String   *   1,   i   As   Integer  
  Open   "c:/student.txt"   For   Binary   As   #1  
  Open   "c:/student2.txt"   For   Binary   As   #2  
  For   i   =   1   To   LOF(1)  
   Get   #1,   ,   ar  
   Put   #2,   ,   ar  
  Next   i  
 Close   #1,   #2

(三)写文件  
    1、   顺序文件  

    写顺序文件我们可以用Write   #   和Print   #语句向一个已经打开的文件中写入数据.  
    下面是他们的格式和说明:  
    Print   #   的语法格式:  
    Print   #   文件号,变量列表  
    例如,将文本框中的文本写到文件中,代码如下:  
  Open   "file.txt"   For   Output   As   #filenum  
  Input   #filenum,   text1.text    
    Write   #   语句的语法格式:  
  Write   #   文件号,变量列表    
    说明:用Write   #   语句写入的信息便于以后用Input   #语句来读取数据,因为Write   #语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号.例如:  
  Open   "student.txt"   For   Output   As   #filenum  
  Write   #filenum,   "张三",   "初一年级",   14  
  Write   #filenum,   "李四",   "职业高中",   18    
    2、   随机文件  
    向随机文件中写入数据,使用Put #语句.语法格式如下:  
  Put   [#]   FileNum   ,[RecNum],UserType    
    说明:  
    (1)   FileNum   是要打开的文件号;RecNum是要写入的记录号,若省略,则再上一次用Get   和Put语句所读写过的记录的后一条记录中写入,如果没有执行过Get   和Put语句,就从第一条记录开始  
    (2)UserType   是包含要写入数据的用户自定义的数据类型变量.例如:我们向前面的student.txt文件中的第5个记录写入数据,可用这些语句:  
  stud.No   =   0301  
  stud.Name   =   “王武”  
  stud.Age   =20  
  Put   #1   ,5,stud    
    如果要插入的数据不只一两条的话,首先要确定文件和每条记录的长度,这样就可以计算出文件中究竟有多少条记录.我们可以用Lof()函数返回文件的长度,Len()函数返回每个记录的长度,计算文件中的记录个数可以用文件的长度除以给个记录的长度.示例如下:  
  Nextrec=   (Lof(1)/Len(UserType))+1  
  Put   #1,Nextrec,UserType    
    3、二进制文件  
    下面是以二进制方式写入文件的语句格式及其说明:  
    格式:  
  Put   [#]fileNumber   ,[Pos],   Var    
    功能:   用二进制方式,从文件的中指定的位置开始写入,所给变量长度的数据  
    说明:  
    (1)FileNumber是以二进制方式打开的文件号.  
    (2)Pos用来指定写操作发生时的字节位置,若省略,则使用当前文件指针位置.  
    (3)Var是用来存放写入的数据的变量.该语句会自动根据var变量包含的字节长度写入文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.  
    使用方法可参考二进制文件的读操作。
原文链接icon-default.png?t=N7T8https://blog.csdn.net/weide001/article/details/4170170

 实际例子:打开一个文本,读出内容,修改后保存


Dim FileName As String

Private Sub Command1_Click()
'On Error Resume Next
    CommonDialog1.ShowOpen
    FileName = CommonDialog1.FileName
    Dim s As String
    Open FileName For Input As #1
    Do While Not EOF(1)              '从头到尾
        Line Input #1, s              '一行一行读取文件
        Text1 = Text1 & s & vbCrLf    '放到文本框中显示
    Loop
    Close #1

End Sub

Private Sub Command2_Click()
    Open FileName For Output As #2
    Print #2, Text1.Text    '将修改后的数据写入新文件(覆盖写入)
    Close #2
    MsgBox "保存修改成功!"
End Sub


【已存在】的文件读写操作

 使用其他方法读写文件:

ReadFile(filePath, "gb2312")

'读txt文件
Public Function ReadFile(ByVal FileName As String, ByVal Charset As String) As String
    Dim objStream As Object
    Set objStream = CreateObject("ADODB.Stream")
    
    With objStream
        .Type = 2 '2-文本模式读取  1-二进制模式
        .Mode = 3 '3 -读写 1-读 2-写
        .Open
        .Charset = Charset      'unicode|utf-8|Ascii|gb2312|big5|gbk
        .LoadFromFile FileName '文件路径
         ReadFile = .ReadText
        .Close
    End With
End Function

判断文件、文件夹是否存在

'判断 文件夹是否存在 第二个参数 vbDirectory
 if Dir(app.path & "\目录", vbDirectory) then msgbox "目录存在"
'判断 文件
 if Dir("C:\a.txt") then msgbox "文件存在"

修改目录的名称

如果有个 路径 E:\111-222\111-222.xls 我想用vb代码将目录改成111-223

Private Sub Command1_Click()
' 定义原始路径和新路径
Dim originalPath As String
originalPath = "E:\111-222\111-222.xlsx"

Dim newDir As String
newDir = "E:\111-223\"

' 获取原始路径的目录和文件名
Dim originalDir As String
originalDir = Left(originalPath, InStrRev(originalPath, "\"))

' 构建新路径
Dim newPath As String
'newPath = newDir & Mid(originalDir, InStrRev(originalDir, "\") + 1) & "\"
newPath = newDir & "\"  '多加一个\好像就行

' 修改目录名称
Name originalDir As newPath
End Sub

修改文件的名称

如果有个 路径 E:\111-222\111-222.xls 我想用vb代码将文件名称改成111-223.xls

' 定义原始路径和新路径
Dim originalPath As String
originalPath = "E:\111-222\111-222.xls"

Dim newFilename As String
newFilename = "111-223.xls"

' 获取原始路径的目录和文件名
Dim originalDir As String
originalDir = Left(originalPath, InStrRev(originalPath, "\"))

Dim originalFilename As String
originalFilename = Mid(originalPath, InStrRev(originalPath, "\") + 1)

' 构建新路径
Dim newPath As String
newPath = originalDir & newFilename

' 重命名文件
Name originalPath As newPath

直接生成文件(没有文件,就会创建)

    Open "F:\TEST\b.txt" For Output As #1
    Print #1, "你好"
    Close

创建文件,保存文件到目录下

 Dim FileName As String
    
    FileName = GetFileOut(Form_CanFX.CommonDialog1, "DBC文件 (*.dbc)|*.dbc", , App.Path) '保存文件到路径
    If FileName = "" Then Exit Sub
    
    Open FileName For Output As #1
    Print #1, "你好"
    Close
    




'保存文件到目录下
''''' "Excel文件(*.xls;*.xlsm;*.xlsx)|*.xls;*.xlsm;*.xlsx|所有文件(*.*)|*.*"
Public Function GetFileOut(Dialog As CommonDialog, FilterType As String, Optional FileName As String, _
                           Optional InitPath As String) As String   '返回空字符串表示单击了取消按钮

'-------------------------------------
On Error GoTo Err_GetFileOut
'-------------------------------------
1   Dialog.DialogTitle = "导出文件"
2   Dialog.Filter = FilterType
3   Dialog.FilterIndex = 0
4   Dialog.FileName = Replace(FileName, "/", "&", , , vbTextCompare)
5   Dialog.InitDir = IIf(InitPath = "", App.Path, InitPath)
6   Dialog.CancelError = True  '设置取消
7   Dialog.ShowSave
8   GetFileOut = Dialog.FileName

    '-------------------------------------
9   On Error GoTo 0
10  Exit Function
Err_GetFileOut:
'11  If MsgBox("【错误代码】:" & Err.Number & vbCrLf & "【错误描述】:" & Err.Description & vbCrLf & "【出错位置】: [FunAll]→ [GetFileOut]的 " & Erl & "行" & vbCrLf & "是否继续?", vbYesNo + vbQuestion + vbDefaultButton1 + vbMsgBoxSetForeground, "错误处理") = vbYes Then Resume Next
12  GetFileOut = ""
End Function

全路径获取前面路径和文件名

'前面路径
FilePath = Left(App.Path, InStrRev(App.Path, "\"))
'文件名
FileName = Right(App.Path, Len(App.Path) - InStrRev(App.Path, "\"))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值