文件重命名问题?

时间:2009-11-15 05:58:52

标签: vb6 file-handling

我正在使用VB6,我有一个文件夹,其中有n个文件。

我想将文件扩展名更改为.txt。我使用下面的代码将所有.fin文件的扩展名更改为.txt

Dim filename1 As String
filename1 = Dir$(txtsourcedatabasefile & "\*.fin", vbDirectory)
Do While filename1 <> ""
    Dim strInput As String
    Dim strOutput As String
    Dim strChar As String
    Dim intChar As Integer
    Dim intLoop As Integer
    strInput = filename1
    strOutput = ""
    For intLoop = 1 To Len(strInput)
        strChar = Mid$(strInput, intLoop, 1)
        intChar = Asc(strChar)
        If ((intChar >= 48) And (intChar <= 57)) Or _
            ((intChar >= 65) And (intChar <= 90)) Or _
            ((intChar >= 97) And (intChar <= 122)) Or _
            (intChar = 95) Then

            strOutput = strOutput & strChar
        End If
    Next
    Name txtsourcedatabasefile & "\" & filename1 As txtsourcedatabasefile & "\" & strOutput & ".txt"
    filename1 = Dir$
Loop

上面的代码适用于将.fin更改为.txt,但如果文件名没有任何扩展名,例如Clockings2.mis04062009 022511 PMSilver_421_export等,则不会转换为.txt延伸Clockings2mis04062009022511PM.txt。例如,Silver_421_export.txt,{{1}}。

我该如何更改此代码?

3 个答案:

答案 0 :(得分:3)

如果我正确解释您的问题,您希望遍历目录中的文件,并将所有扩展名为“.fin”,或根本没有扩展名的文件更改为“.txt” ”。您可以添加对Microsoft Scripting Runtime的引用,并使用FileSystemObject来轻松地执行此操作。在此示例中,我们假设txtsourcedatabase包含您要处理的目录:

Dim fso As New FileSystemObject
Dim fil As Variant

For Each fil In fso.GetFolder(txtsourcedatabase).Files
  If (LCase$(fso.GetExtensionName(fil.Name)) = "fin") Or _
      (fso.GetExtensionName(fil.Name) = vbNullString) Then
    fso.MoveFile fil.Path, fso.BuildPath(fso.GetParentFolderName(fil.Path), _
      fso.GetBaseName(fil.Path) & ".txt")
  End If
Next

答案 1 :(得分:0)

首先,我认为你想将你的Dir $属性从vbDirectory更改为vbNormal。其次,我认为你应该简化你的重命名代码。您可以使用内置的VB函数替换来执行您想要的操作。

Dim filename1 As String

filename1 = Dir$(txtsourcedatabasefile & "\*.fin", vbNormal)

Do While Len(filename1) > 0
   Name txtsourcedatabasefile & "\" & filename1 As txtsourcedatabasefile & "\" & _
       Replace(filename1, ".fin", ".txt", Len(txtsourcedatabasefile & "\" & filename1) - 4, 1, vbTextCompare)
   filename1 = Dir$
Loop

答案 2 :(得分:-1)

好的,有些事情。这不会真正解决您的问题,但您知道,您尝试做的一些事情可以从命令提示符(ren * .fin * .txt)完成。显然,这并没有解决没有扩展名的文件问题 其次,基于使用* .fin调用Dir命令,你甚至不应该获得没有扩展名的文件 第三,假设你的标准是重命名所有以.fin结尾或没有扩展名.txt的文件...这应该有效:

Private Const txtsourcedatabasefile As String = "C:\test\"
Public Sub Example()
    Dim filename1 As String
    Dim strOutput As String
    filename1 = Dir$(txtsourcedatabasefile & "*")
    Do While LenB(filename1)
        strOutput = filename1
        If InStrB(1, strOutput, ".", vbBinaryCompare) = 0& Then
            strOutput = strOutput & ".txt"
            Name txtsourcedatabasefile & filename1 As txtsourcedatabasefile & strOutput
        ElseIf LCase$(Right$(filename1, 4)) = ".fin" Then
            Mid$(strOutput, Len(filename1) - 2) = "txt"
            Name txtsourcedatabasefile & filename1 As txtsourcedatabasefile & strOutput
        Else
            Debug.Print "Skipped:", strOutput
        End If
        filename1 = Dir$
    Loop
End Sub