#vb.net #appendfile
#vb.net #appendfile
Вопрос:
Я немного работал над этим, и все примеры, которые я нашел, заключались в добавлении заданной строки в файл, но я не смог найти никакой удачи с добавлением целого файла в конце файла. Все использовали .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(".*_Chd.sgm")
Dim ch1 = New Regex(".*_Ch[1].sgm")
Dim existingFile = searchDir amp; "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 amp; "" amp; 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
Комментарии:
1. Означает ли .sgm, что они содержат SGML?
2. Да, SGM означает SGML. Но там точно так же, как текстовые файлы, которые можно добавлять в один и другой, при условии, что они соответствуют требованиям
3.Мне кажется, что
Dim result = Path.GetFileName(file)
Dim fileToCopy = searchDir amp; "" amp; result
это долгий способ сделатьDim fileToCopy = file
— или есть какой-то другой код, который был опущен в вопросе? (Каталог.GetFiles возвращает полный путь, а также имя файла.)4. Я ввел полный путь, потому что код будет выполняться в нескольких подпапках в нашей системе
Ответ №1:
Вы можете прочитать содержимое файла в виде строки, а затем использовать 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)
Используя путь.Объединение немного лучше, чем объединение строк.
Комментарии:
1. в зависимости от размера файла загрузка всего файла в память может оказаться невозможной. Более общим подходом было бы чтение фрагментов файла.
2. @FalcoGer Давайте побеспокоимся об этом, если это действительно произойдет. Мы также должны проверить, достаточно ли свободного места на диске.
3. Это было здорово! Большое вам спасибо.
Ответ №2:
Вы можете буквально добавить все байты, используя подход, подобный этому:
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