Добавить один файл в другой файл
Я немного работал над этим, и все примеры, которые я нашел, были для добавления данной строки в файл, но я не смог найти удачу с добавлением целого файла в конце файл. Все используют.appendAllText или appendText, который не соответствует моим потребностям.
Мои файлы .sgm
, В своем коде я сначала беру все файлы sgm, затем проверяю, заканчивается ли этот файл _Ch#.
Я готов добавить файл к мастеру, но пока все, что я смог сделать, это добавить текст строки имени файла в конец мастера.
Ваша помощь очень ценится. Максимум
Public Class Form1
Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
Dim searchDir As String = txtSGMFile.Text 'input field for user
'Get all the sgm files in the directory specified
Dim fndFiles = Directory.GetFiles(searchDir, "*.sgm")
'Set up the regular expression you will make as the condition for the file
Dim rx = New Regex(".*_Ch\d\.sgm")
Dim ch1 = New Regex(".*_Ch[1]\.sgm")
Dim existingFile = searchDir & "\Bld1_Master_Document.sgm"
'Loop through each file found by the REGEX
For Each file In fndFiles
If rx.IsMatch(file) Then
If ch1.IsMatch(file) Then
Dim result = Path.GetFileName(file)
Dim fileToCopy = searchDir & "\" & result
'THIS IS WHERE I WANT TO APPEND fileToCopy INTO existingFile
System.IO.File.AppendAllText(fileToCopy, existingFile)
MessageBox.Show("File Copied")
End If
'MsgBox(file)
End If
Next file
Close()
End Sub
2 ответа
Решение
Вы можете прочитать содержимое файла в строку и затем использовать AppendAllText следующим образом:
Imports System.IO
' ...
Dim fileToCopy = Path.Combine(searchDir, result)
'THIS IS WHERE I WANT TO APPEND fileToCopy INTO existingFile
Dim fileContent = File.ReadAllText(fileToCopy)
File.AppendAllText(existingFile, fileContent)
Использование Path.Combine немного лучше, чем объединение строк.
Вы можете буквально добавить все байты, используя такой подход:
Using fs As New System.IO.FileStream(existingFile, IO.FileMode.Append)
Dim bytes() As Byte = System.IO.File.ReadAllBytes(fileToCopy)
fs.Write(bytes, 0, bytes.Length)
End Using