2013-07-13 7 views
-1

저는 바이너리 파일에 데이터를 쓰는 델파이로 프로그램을 만들고 있는데 해결 방법을 모르는 문제가 있습니다.델파이에서 이진 파일로 작성

나는 다음과 같은 코드를 가지고 : 나는 WinHex가 좋아 보인다 그것을 볼 때 때문에

testar: = TFileStream.Create ('test.exe', fmOpenWrite); 
testar.Position: = testar.Size; 

here: = '{test} test {test}'; 

testar.Write (here, 1024); 

바이너리 코드 WinHex와

http://img836.imageshack.us/img836/3206/la49.jpg

이 책 미세 인쇄 테스트,하지만 다른 코드 :

testar: = TFileStream.Create ('test.exe', fmOpenWrite); 
testar.Position: = testar.Size; 

here: = '{test}' + Edit1.Text + '{test}'; 

testar.Write (here, 1024); 

이진 코드를 편집 할 때 편집에 문제가있는 것 같아서 이상하게 보입니다. 왜냐하면 을 모두 사용하기 때문에 작은 따옴표가 사용되지만 편집의 예는 작동하지 않습니다.

참고 : 프로그램에 오류 메시지가이 문제를 도와 줄 수

누군가를 제공하지 않는 이유는 무엇입니까?

+0

'testar'는 어디에서 어떻게 정의되어 있습니까? 또한 복사 오류 (* 예 : *,'test : = ...'는'test : = ...'여야합니다.)라고 가정하고있는 코드에는 많은 구문 오류가 있습니다. – lurker

+2

비 - 사진 이미지 (예 : 스크린 샷, 다이어그램, 로고 유형 ...). –

+1

코드가 의미가 없습니다. 두 예제 모두 스트림에 1024 바이트의 데이터를 쓰도록 지시하지만 약 1000 바이트는 너무 적게 전달합니다. 즉, 문자열의 끝 부분을 지나서 데이터를 계속 쓰는 것입니다. 그 무작위 데이터는 문자열의 끝을 지나서 메모리에있을 것입니다. 스트림에 쓸 필요가있는 실제 바이트 수를 전달하십시오. 이 바이트를 쓰면 작동하지 않고'Some_Value_Plucked_From_The_Air' 바이트를 계속 유지합니다. 그냥 어디에서나 야생 값을 추측하거나 잡는 대신 문서를 읽으십시오. –

답변

2

실제 코드는 아니지만 "여기"가 문자열 인 것 같습니다.

test.Write(PChar(here)^, SizeOf(Char) * Length(here)); 

추신 : 스트리밍 문자열 몸을 작성하려면 다음 코드를 사용할 수 있습니다 스트림 (파일)에서이 문자열을 나중에 읽으려면 문자열 본문 앞에 길이를 쓰는 것이 좋습니다.

+1

문자열을 쓰려면 대신'TStreamWriter' 클래스를 사용하는 것이 좋습니다. 특히 TEncoding을 인식하기 때문에 D2009 +에서. –