2009-11-15 5 views
0

Я использую 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 PM, Silver_421_export и т.д., не преобразуется в .txt расширения. Например, Clockings2mis04062009022511PM.txt, Silver_421_export.txt.

Как мне изменить этот код?

ответ

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

Хорошо, несколько вещей. Это не поможет устранить вашу проблему, но, как вы знаете, некоторые из того, что вы пытаетесь сделать, могут быть выполнены из командной строки (ren * .fin * .txt). Очевидно, это не касается проблемы с файлами без расширений.
Во-вторых, вы даже не должны получать файлы без расширений на основе вызова команды Dir с помощью * .fin.
В-третьих, при условии, ваши критерии, чтобы переименовать все файлы, оканчивающиеся на .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 
+0

Почему это проголосовали? – Oorang

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 
Смежные вопросы