Demonstrate Copying A Directory of Binary Files Byte by Byte
As the Basis for Adding Code to Make Output File Updates
The program demonstrates looping through a directory of binary files (in this case docx. files), and copying them byte by byte to a new output file. While this example is just the skeleton on how to accomplish this, the real application would be to add code to either delete, update or add additional information (bytes) to the output file. This is useful for updating binary files, as long as they don't use a checksum, which prevents this type of copy.
Program Code
Option Explicit Public Sub LoopReadBinaryFile() ' ********************************************************* ' This demonstrates opening a binary file, reading it ' one byte at a time, and writing out a copy of the ' file a byte at a time. The resulting files are identical. ' It will loop through all the files in the input ' directory ' ' Additional code can be added to insert or delete the ' contents of the input file and create a custom output ' file ' ********************************************************* Dim strDirectoryPathToWordFiles As String Dim i As Long Dim strWordFileName As String Dim strWordFileNameLen As Long Dim byteArr() As Byte Dim byteValue As Byte Dim fileInt As Integer: fileInt = FreeFile Dim fileOut As Integer: fileOut = fileInt + 1 strDirectoryPathToWordFiles = "C:\WordFiles\" ' ********************************************************* ' Set Up a Loop using the DIR command to loop through ' all the word files in the C:\WordFiles\ directory ' ********************************************************* ' ' ********************************************************* ' Retrieve the first word file in the directory ' ********************************************************* strWordFileName = Dir(strDirectoryPathToWordFiles, vbNormal) ' ********************************************************* ' Loop through all the Word files until the retrieved ' file name is empty (All files have been processed ' ********************************************************* Do Until strWordFileName = "" ' ********************************************************* ' Open the designated Word file for Read Only ' ********************************************************* Open strDirectoryPathToWordFiles & strWordFileName For Binary Access Read As #fileInt ' ********************************************************* ' Get the length of the file name so it can be altered ' to create a new output file name ' ********************************************************* strWordFileNameLen = Len(strWordFileName) ' ********************************************************* ' Open the output word file with a new name ' for Write Access ' ********************************************************* Open strDirectoryPathToWordFiles & Left(strWordFileName, strWordFileNameLen - 5) & "Updated.docx" For Binary Access Write As #fileOut ' ********************************************************* ' Create an Array containing the number of bytes ' in the input file ' ********************************************************* ReDim byteArr(0 To LOF(fileInt) - 1) ' ********************************************************* ' Read the entire contents of the input file into the ' Array just created ' ********************************************************* Get #fileInt, , byteArr ' ********************************************************* ' Loop through the copy of the input file which was ' loaded into the array one byte at a time and write ' to the output file one byte at a time ' ********************************************************* For i = 0 To UBound(byteArr) byteValue = byteArr(i) Put #fileOut, , byteValue Next i strWordFileName = Dir ' ********************************************************* ' When the file is complete, close the input and output ' files and get the next file in the input directory ' ********************************************************* Close #fileInt Close #fileOut Loop End Sub