1
- using System ;
2
- using System . Collections . Generic ;
1
+ using System . Collections . Generic ;
3
2
using System . IO ;
4
3
using System . Text ;
4
+ using R2MagicDecoder ;
5
5
6
6
namespace Ray2StringEd
7
7
{
@@ -15,19 +15,21 @@ public FixManager(string path, int offset = 0x7051F4)
15
15
16
16
private string Path { get ; }
17
17
private int Offset { get ; }
18
+ private byte [ ] FixBytes { get ; set ; }
18
19
19
20
public IEnumerable < FixString > ReadFix ( )
20
21
{
21
- using ( FileStream file = new FileStream ( Path , FileMode . Open , FileAccess . Read ) )
22
+ FixBytes = MagicDecoder . DecodeBytes ( File . ReadAllBytes ( Path ) ) ;
23
+ using ( MemoryStream fix = new MemoryStream ( FixBytes ) )
22
24
{
23
- file . Seek ( Offset , SeekOrigin . Begin ) ;
25
+ fix . Seek ( Offset , SeekOrigin . Begin ) ;
24
26
25
- using ( BinaryReader reader = new BinaryReader ( file ) )
27
+ using ( BinaryReader reader = new BinaryReader ( fix ) )
26
28
{
27
- long fileLength = file . Length ;
29
+ long fixLength = fix . Length ;
28
30
long position ;
29
31
30
- while ( ( position = reader . BaseStream . Position ) != fileLength )
32
+ while ( ( position = reader . BaseStream . Position ) != fixLength )
31
33
{
32
34
int length = reader . ReadInt32 ( ) ;
33
35
@@ -45,29 +47,37 @@ public IEnumerable<FixString> ReadFix()
45
47
46
48
public void WriteFix ( IEnumerable < FixString > strings )
47
49
{
48
- using ( FileStream file = new FileStream ( Path , FileMode . Open , FileAccess . Write ) )
50
+ using ( MemoryStream fix = new MemoryStream ( FixBytes ) )
51
+ using ( BinaryWriter writer = new BinaryWriter ( fix ) )
49
52
{
50
- using ( BinaryWriter writer = new BinaryWriter ( file ) )
53
+ foreach ( FixString s in strings )
51
54
{
52
- foreach ( FixString s in strings )
53
- {
54
- file . Seek ( s . Offset , SeekOrigin . Begin ) ;
55
+ fix . Seek ( s . Offset , SeekOrigin . Begin ) ;
55
56
56
- string text = s . Text + '\0 ' ;
57
- byte [ ] bytes = Encoding . GetEncoding ( 1252 ) . GetBytes ( text ) ;
57
+ string text = s . Text + '\0 ' ;
58
+ byte [ ] bytes = Encoding . GetEncoding ( 1252 ) . GetBytes ( text ) ;
58
59
59
- writer . Write ( s . DwordLength ) ;
60
- writer . Write ( bytes ) ;
60
+ writer . Write ( s . DwordLength ) ;
61
+ writer . Write ( bytes ) ;
61
62
62
- int freeLength = s . ByteLength - bytes . Length - 4 ;
63
- if ( freeLength > 0 )
64
- {
65
- byte [ ] freeBytes = new byte [ freeLength ] ;
66
- writer . Write ( freeBytes ) ;
67
- }
63
+ int freeLength = s . ByteLength - bytes . Length - 4 ;
64
+ if ( freeLength > 0 )
65
+ {
66
+ byte [ ] freeBytes = new byte [ freeLength ] ;
67
+ writer . Write ( freeBytes ) ;
68
68
}
69
69
}
70
70
}
71
+
72
+ File . WriteAllBytes ( Path , MagicDecoder . DecodeBytes ( FixBytes ) ) ;
73
+ }
74
+
75
+ public void BackupFix ( )
76
+ {
77
+ string bakPath = Path + ".bak" ;
78
+
79
+ if ( ! File . Exists ( bakPath ) )
80
+ File . Copy ( Path , bakPath ) ;
71
81
}
72
82
}
73
83
}
0 commit comments