J'ai 2 applications. Un en C++ (Windows) ouvrir un fichier binaire et ne fait que lire, je l'utilise:Écrire au fichier binaire en C++ et C#
fstream m_fsDataIN.open("C:\TTT", ios::in | ios::binary | ios::app);
et la deuxième application (est en C#) ouvre le fichier et lui écrit. J'utilise:
byte[] b = ... //have a binary data
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(
System.IO.File.Open(@"C:\TTT",
System.IO.FileMode.Append,
System.IO.FileAccess.Write,
System.IO.FileShare.ReadWrite));
bw.Write(b);
bw.Flush();
bw.Close();
Le problème est que les 8 premiers octets sont écrits de manière incorrecte, la comparaison à ce qui apparaît dans le tableau b
.
Lorsque j'ouvre le fichier dans l'application C#, l'utilisation de System.IO.FileMode.Append
fonctionne correctement.
J'ai vérifié dans l'application et il écrit 8 octets faux.
Je veux ajouter que les 8 premiers octets sont 2 compteurs qui ont chacun été créés en utilisant IPAddressHostToNetworkAddress
.
Je pense que le problème est dans l'application C++, dans la façon dont j'ouvre le fichier.
Aide, Thnaks
Peut-être utile si vous nous montrez votre code qui utilise 'IPAddressHostToNetworkAddress'. Cela me semble un problème d'endianisme. – Noldorin
Roman: l'ouverture semble OK mais vous ne montrez pas comment vous lisez dans le flux. La lecture d'un flux peut être formatée (en utilisant l'opérateur <<) ou non; cela peut faire toute la différence. Pourriez-vous poster ces parties aussi? – LaszloG
Lecture: std :: vecteur \t m_vctDataIN; m_vctDataIN.resize (1000); m_fsDataIN.read (& m_vctDataIN [], 1000); int nReadBytes \t = m_fsDataIN.gcount(); m_nBytesInBuffer + = nReadBytes; *** J'ai trouvé une autre chose: Lorsque l'application C++ est arrêtée, l'application C# écrit correctement. Quand il est en place, il écrit mal. –