Копировать файл VB, если Regex соответствует - PullRequest
0 голосов
/ 04 марта 2019

Я работаю над следующим кодом.Он запускается в текстовом файле, в котором есть список частичных имен.Нужно пройтись по текстовому файлу, выбрать каждое имя одно за другим, затем пройти по каталогу, найти этот файл с частичным совпадением и скопировать его в другую подпапку.

Я изменил код для использования Directory.GetFiles,Он находит файл с использованием подстановочного знака, но System.IO.File.Exists и .Copy не работают с переменными sFileToFind и MoveWithParth.Я не уверен, что я даже на правильном пути с этим.

Спасибо за вашу помощь и терпение Максин

код:

Dim sFileToFind As String
Dim MoveLocation As String
Dim location As String
Dim MoveWithPath As String
Dim File As String



location = txtFolderPath.Text
MoveLocation = txtMovePath.Text

Dim FILE_NAME As String
FILE_NAME = txtFileName.Text

Dim objReader As New System.IO.StreamReader(FILE_NAME)

Do While objReader.Peek() <> -1
File = objReader.ReadLine()
sFileToFind = location & "\" & File & "*.*"
MoveWithPath = MoveLocation & "\" & File & "*.*"

Dim paths() As String = IO.Directory.GetFiles(location, File & "*.*")
If paths.Length > 0 Then
If System.IO.File.Exists(sFileToFind) = True Then
System.IO.File.Copy(sFileToFind, MoveWithPath)
End If
End If

Loop

MsgBox("Files have been moved")
Me.Close()

Примеримена файлов:

FullFileName.doc
File.txt
Name.sgm

Пример файла со списком имен:

FileName
File.txt
Name

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я нашел свой ответ.Поскольку я не мог использовать System.IO.File.Exists (sFileToFind), потому что он не требует регулярных выражений, я сосредоточился на «IO.Directory.GetFiles»

Вот мой код.Посмотрите и дайте мне знать, если это может быть лучше написано.

Dim sFileToFind As String
Dim MoveLocation As String
Dim location As String
Dim MoveWithPath As String
Dim File As String
Dim LogFile As FileStream = File.Create(MoveLocation & "\" & Log & ".txt")


location = txtFolderPath.Text
MoveLocation = txtMovePath.Text

Dim FILE_NAME As String
FILE_NAME = txtFileName.Text

Dim objReader As New System.IO.StreamReader(FILE_NAME)

Do While objReader.Peek() <> -1
File = objReader.ReadLine()
sFileToFind = location & "\" & File & "*.*"
Dim paths() As String = IO.Directory.GetFiles(location, "*" & File & "*.*")
    For Each pathAndFileName As String In paths
        If System.IO.File.Exists(pathAndFileName) = True Then
            Dim sReg As String() = pathAndFileName.Split(New Char() {"\"c})
            Dim sRegLast As String = pathAndFileName.Substring(pathAndFileName.LastIndexOf("\") + 1)
            MoveWithPath = MoveLocation & "\" & sRegLast
            System.IO.File.Copy(pathAndFileName, MoveWithPath)
        Else
            'Write to output file. File not found
            LogFile = MoveLocation & "\" & Log & ".txt"
        End If
    Next

Loop

MsgBox("Files have been moved")
Me.Close()
0 голосов
/ 04 марта 2019

Вы можете использовать Directory.GetFiles (dirPath, searchPattern) , чтобы получить список файлов, которые соответствуют шаблону.

searchPattern может быть "*" & File & "*", но dirPath должен быть путемв базовый каталог, где находятся ваши файлы.

Я бы настоятельно рекомендовал заранее проверить File, чтобы убедиться, что он не содержит никаких специальных символов, таких как * и?и обрежьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...