나는이 같은 구조체 (가) 포함 파일이 있습니다 단어를 들어BinaryWriter.Write (INT32)
public struct index
{
public string word; //30 bytes
public int pos; //4 bytes
};
을, 나는 그것을 쓰기 전에 30 바이트로 확장 확인하고 POS가 나는대로 쓰기 int32가 4 바이트라는 것을 알고 있기 때문입니다. 여기
파일에 작성하는 코드입니다 :for (i = 0; i < ind.word.Length; i++)
{
bword[i] = (byte)idx_array[l].word[i];
}
for (; i < SIZE_WORD; i++) //30
{
bword[i] = 0;
}
bw_idx.Write(bword, 0, SIZE_WORD);
bw_idx.Write(ind.pos);
코드 컴파일 잘 한 가지를 제외하고 작동 : 기록 얻을 나던 INT32. 내가 메모장을 사용하여 파일을 선택하면 ++ 나는 INT이 있어야 할 곳을 참조하십시오 SOH NULL NULL NULL
내가 SOH를 고개가 (제목의 시작) SOH 있어야하는데 :
이 문자의 시작을 표시하는 데 사용됩니다 이 주소는 주소 또는 라우팅 정보가 포함 된 일 수 있습니다.
내 int32가 쓰지 않는 이유는 무엇이 있습니까? 당신이 (파일이 프로젝트의 bin debug 폴더에 저장됩니다) 시도 할
코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace test_write
{
class Program
{
struct enreg
{
public string word;
public int pos;
}
const int SIZE_WORD = 30; //30 bytes
const int SIZE_POS = 4; //4 bytes
static byte[] bword = new byte[SIZE_WORD];
static byte[] bpos = new byte[SIZE_POS];
static void Main(string[] args)
{
enreg enr = new enreg();
Console.Write("word : ");
enr.word = Console.ReadLine();
Console.Write("\anumber : ");
enr.pos = int.Parse(Console.ReadLine());
FileStream fs = File.Open("temp", FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
int i = 0;
for (i = 0; i < enr.word.Length; i++)
{
bword[i] = (byte)enr.word[i];
}
for (; i < SIZE_WORD; i++)
{
bword[i] = 0;
}
bpos = BitConverter.GetBytes(enr.pos);
bw.Write(bword, 0, SIZE_WORD);
bw.Write(bpos, 0, SIZE_POS);
fs.Close();
}
}
}
메모장 ++ 대신 16 진수 편집기를 사용하는 것이 좋습니다. [Frhed] (http://frhed.sourceforge.net/en/)는 멋진 opensource입니다. 또한 파일을 제대로 닫았는지 확인하십시오. –
또한,'FileStream.Write (Int32)'도 표시되지 않습니다. ['BinaryWriter.Write (Int32)'] (http://msdn.microsoft.com/en-us/library/24e33k1w (v = vs.100) .aspx)를 의미합니까? –
잘 닫혀 있고 작동하지 않아도 작동하지 않습니다. – AntoineLev