Добавить один файл в другой файл

#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