替换文件名问题?

时间:2009-10-19 06:38:27

标签: vb6

使用VB6

在一个文件夹中,我有n个文本文件,文件名就像abc.mis-.txt,def.fin @ .txt,所以我想重命名像abcmis.txt,deffin.txt这样的文件名。我使用了一个重命名函数。

代码

Dim filename3 As String
filename3 = Dir$(txtSourceDatabaseFile & "\*.txt", vbDirectory)
Do While filename3 <> ""

'重命名功能

Dim strInput As String
Dim stroutput As String
Dim strChar As String
Dim intChar As Integer
Dim intLoop As Integer
strInput = filename3
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 & "\" & filename3 As txtSourceDatabaseFile & "\" & stroutput & ".txt"


filename3 = Dir$
Loop

以上编码正在工作,问题是我在使用conditon时,所以它会重命名所有的txt文件,它给出了一个喜欢的名字

例如。

The first time giving a fileaname as abc in "stroutput"
The second time giving a filename as abcdef in "Stroutput"
...,

它还添加了一个以前的文件名,因为我在while循环中获取了一个文件名。

如何修改我的代码。

1 个答案:

答案 0 :(得分:1)

将您的函数移动到VB6函数中,该函数将文件名作为参数并返回新的函数,例如:

Private Function GetTextOnlyFileName(ByVal strOldName as String) As String
    Dim strTemp As String
    Dim strChar As String
    Dim intChar As Integer
    Dim intLoop As Integer
    For intLoop = 1 To Len(strOldName)
        strChar = Mid$(strOldName, 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
        strTemp = strTemp & strChar
        End If
    Next
    GetTextOnlyFileName = strTemp
End Function

然后使用类似这样的内容来获取新文件名:

Do While filename3 <> ""
    strNewName = GetTextOnlyFileName(strFileName3)
    'next rename the file to strNewName


    'get name of next file
Loop

但是,如果两个不同的源文件名提供相同的重命名文件名,您希望发生什么?例如,目前abc@def.txt和ab @ cd @ ef.txt将返回相同的内容。

您的代码当前正在将文件名附加到上一个,因为您在循环中一次又一次地重复使用相同的变量而不清除先前的值。我的函数可以正常工作,但是你可以在strInput = filename3之后添加strOutPut =“”行,这也应该可以工作。