File tree Expand file tree Collapse file tree 3 files changed +19
-22
lines changed
Expand file tree Collapse file tree 3 files changed +19
-22
lines changed Original file line number Diff line number Diff line change @@ -10,17 +10,18 @@ public interface IMarkerFinder
1010
1111 public class MarkerFinder : IMarkerFinder
1212 {
13- private const string MsciMarker = "4D-53-43-49" ; // "MSCI" marker
13+ private const int MsciMarkerSize = 4 ;
14+ private const int MsciMarker = 0x4943534D ; // "MSCI" marker Little Endian
1415
1516 public long FindMarker ( FileStream fileStream )
1617 {
1718 byte [ ] markerBytes = new byte [ 4 ] ;
18- while ( fileStream . Read ( markerBytes , 0 , 4 ) == 4 )
19+ while ( fileStream . Read ( markerBytes , 0 , MsciMarkerSize ) == 4 )
1920 {
20- string hexValue = BitConverter . ToString ( markerBytes ) ;
21- if ( hexValue == MsciMarker )
21+ if ( BitConverter . ToInt32 ( markerBytes , 0 ) == MsciMarker )
2222 {
23- return fileStream . Position - 4 ;
23+ fileStream . Seek ( - MsciMarkerSize , SeekOrigin . Current ) ;
24+ return fileStream . Position ;
2425 }
2526 fileStream . Seek ( - 2 , SeekOrigin . Current ) ;
2627 }
Original file line number Diff line number Diff line change @@ -10,14 +10,16 @@ public interface ITapeHeaderValidator
1010
1111 public class TapeHeaderValidator : ITapeHeaderValidator
1212 {
13- private const string TapeHeaderStart = "54-41-50-45" ; // Start of tape header "TAPE"
14-
13+ private const int TapeHeaderSize = 4 ;
14+ private const int TapeHeaderStart = 0x45504154 ; // Start of tape header "TAPE" Little Endian
1515 public bool Validate ( FileStream fileStream )
1616 {
17- byte [ ] tapeHeaderStartBytes = new byte [ 4 ] ;
18- fileStream . Read ( tapeHeaderStartBytes , 0 , 4 ) ;
19- string hexValue = BitConverter . ToString ( tapeHeaderStartBytes ) ;
20- return hexValue == TapeHeaderStart ;
17+ byte [ ] tapeHeaderStartBytes = new byte [ TapeHeaderSize ] ;
18+
19+ if ( fileStream . Read ( tapeHeaderStartBytes , 0 , TapeHeaderSize ) != TapeHeaderSize )
20+ return false ; // Not enough data in the file
21+
22+ return BitConverter . ToInt32 ( tapeHeaderStartBytes , 0 ) == TapeHeaderStart ;
2123 }
2224 }
2325}
Original file line number Diff line number Diff line change @@ -5,24 +5,18 @@ namespace SQLBakVersion.Class
55{
66 public interface IVersionDeterminer
77 {
8- string DetermineVersion ( FileStream fileStream , long versionOffset ) ;
8+ string DetermineVersion ( FileStream fileStream , long MSCIOffset ) ;
99 }
1010
1111 public class VersionDeterminer : IVersionDeterminer
1212 {
13- private const int BytesPerSet = 16 ; // Number of bytes in each set
14- private const int ByteToRetrieve = 13 ; // Byte number to retrieve in the 11th set
1513
16- public string DetermineVersion ( FileStream fileStream , long versionOffset )
14+ public string DetermineVersion ( FileStream fileStream , long MSCIOffset )
1715 {
18- const int setsToSkip = 10 ; // Number of sets to skip
19- long totalBytesToSkip = BytesPerSet * setsToSkip ;
20- totalBytesToSkip += versionOffset ; // Adjust for marker offset
21-
22- fileStream . Seek ( totalBytesToSkip , SeekOrigin . Begin ) ;
23- fileStream . Seek ( ByteToRetrieve - 1 , SeekOrigin . Current ) ; // Seek to the byte position
24-
16+ long versionOffset = MSCIOffset + 172 ;
2517 byte [ ] versionBytes = new byte [ 2 ] ;
18+
19+ fileStream . Seek ( versionOffset , SeekOrigin . Begin ) ;
2620 fileStream . Read ( versionBytes , 0 , 2 ) ;
2721 Int16 dbVersion = BitConverter . ToInt16 ( versionBytes , 0 ) ;
2822
You can’t perform that action at this time.
0 commit comments