Bonjour,

Je migre (réécrit) un petit logiciel VB6 en C#. Je m'attarde actuellement à pouvoir lire les fichiers data existant fait dans une stucture binaire VB6 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nNumFile = FreeFile
Open sFileTemp For Binary As #nNumFile
 
    If LOF(nNumFile) > 0 Then
        Get #nNumFile, , lLen
        lSeek = Seek(nNumFile)
        Set macollection = New Collection
        For i = 1 To lLen
            Set oObjet = New cMaClasse
            oObjet.Load nNumFile, lSeek
            macollection.Add ass
        Next
    End If
 
Close #nNumFile
et das le .Load :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub Load(ByVal numFile As Long, ByRef lSeek As Long)
    Get #numFile, , ID 'long
    Get #numFile, , CoefMO 'single
    Get #numFile, , TypeAss 'Integer
 
    'Lecture chaine
    Dim lLen As Long
    Get #numFile, , lLen 'Longueur à lire
    If lLen > 0 Then
        Code = Space$(lLen)
        Get #numFile, , Code
    End If
 
    'Sous classe 
    oFontText.Load numFile
 
    lSeek = Seek(numFile)
End Sub
et dans la classe d'oFont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub Load(ByVal numFile As Long)
    Dim lLen          As Long
    Dim i             As Integer
    Dim lValue As Long
    Dim nLocalVersion As Integer
 
    Get #numFile, , nLocalVersion
    Get #numFile, , iBold
    Get #numFile, , iItalic
    Get #numFile, , iUnderline
    Get #numFile, , iStrikethrough
    Get #numFile, , iSize
    Get #numFile, , iWeight
    Get #numFile, , iCharSet
    Get #numFile, , iColor
 
    Dim i As Long
    Get #hFile, , i
    If i > 0 Then
        sText = Space$(i)
        Get #hFile, ,  iFontName 
    End If
End Sub
Voilà pour planter le décor et mon anguoisse.

En C# c'est assez différent me semble-t-il...

J'ai commencé comme cela mais déjà je bloque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void Load(string fileName)
{
    FileStream stream = new FileStream(fileName, FileMode.Open);
    BinaryReader reader = new BinaryReader(stream);
 
    int value = reader.ReadInt32();
    for (int i = 0; i < value; i++)
    {
        maClasse oObjet = new maClasse();
        ass.ID = reader.ReadInt32();
        ass.CoefMO = reader.ReadSingle();
        ass.TypeAss = reader.ReadInt16();
 
        //là ca me semble mauvais comme code :
        lLen = reader.ReadInt32();
        if (lLen > 0)
        {
            string sSt = new String(' ', lLen);
             ass.Code = reader.ReadString();
        }
 
        //et là pire :
        Classes.Font oFont = new Classes.Font();
        oFont.Load(reader);
 
        (...)
 
    }
}
et la classe oFont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
namespace Classes
{
    class Font
    {
        private short mVersion=1 ;
 
        string iFontName="arial";
        bool iBold =false;
        bool iItalic ;
        bool iUnderline;
        bool iStrikethrough ;
        double iSize=8.25;
        short iWeight;
        short iCharSet;
        int iColor=0;
 
        public void Load(BinaryReader reader)
        {
            short nLocalVersion= reader.ReadInt16();
            iBold=reader.ReadBoolean();
            iItalic=reader.ReadBoolean();
            iUnderline=reader.ReadBoolean();
            iStrikethrough=reader.ReadBoolean();
            iSize = reader.ReadDouble();
            iWeight= reader.ReadInt16();
            iCharSet= reader.ReadInt16();
            iColor = reader.ReadInt32();
 
            //Get #hFile, , i
            //If i > 0 Then
            //    sText = Space$(i)
            //    Get #hFile, , sText
            //    LoadString = Crypte(sText)
            //End If
            int lLen = reader.ReadInt32();
            if (lLen > 0)
            {
                string sText = new String(' ', lLen);
                iFontName = reader.ReadString();
            }
        }
 
    }
}
Je suis preneur de toutes remarques ! au secours...