2013-08-01 3 views
-1

나는 현재 내가하는 게임에 대한 데모 파일 파서를 만들고 있습니다. 나는 형식과 PHP에서 주어진 예제 (C#으로 변환하려고 시도하고있다.)를 보았지만 fgetc를 사용한다.이 함수는 C#에서만 사용할 수있는 것이 아니라 C++에서만 사용할 수있다. 이 문제를 해결할 수있는 아이디어가 있습니까? StreamReader.Read()을 사용해 보았지만 null 값을 좋아하지 않습니다.fgetc alternative in C#

예를 들어 전체 스크립트를 살펴보고 내가 얻으려고하는 것의 더 나은 아이디어를 얻으려는 경우 here을 찾을 수 있습니다.

감사합니다.

+2

"null 값을 좋아하지 않습니다"라고 할 때 당신은 무엇을 의미합니까? – Kian

+0

그것은 예외를 던질 것입니다 – user1522379

답변

2

해당 파일을 읽으려면 BinaryReader을 사용하는 것이 좋습니다. int을 읽으려면 ReadInt32으로 전화하십시오. 자신의 문자열을 읽으려면 바이트 단위 ReadByte를 읽고 0

using (var fs = File.OpenRead(filename)) 
{ 
    using (var reader = new BinaryReader(fs)) 
    { 
     // reading happens here 
    } 
} 

개인 문자열 ReadString (BinaryReader를 리더) { 바이트 (B)와 비교해야합니다; StringBuilder sb = new StringBuilder(); ((b = reader.ReadByte())! = 0) { sb.Append ((char) b); } return sb.ToString(); }

코드를 잘못 변환했습니다. 파일 형식에 따르면 문자열의 길이는 260 자입니다. 그래서이 같은 문자열을 트림 260 바이트를 읽고해야합니다 그것은

string hldemo = ReadString(reader, 8); 

예를 들어, 호스트 이름을 읽어 :

private string ReadString(BinaryReader reader, int length = 260) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < length; ++i) 
    { 
     byte b = reader.ReadByte(); 
     sb.Append((char)b); 
    } 
    return sb.ToString().Trim(); 
} 

헤더를 읽으려면 작성합니다

string host = ReadString(reader); 

PHP 코드의 정확한 복제본입니다. 다른. 자열 길이는 형식. 서를 참조하고 샘플 코드를보십시오. 나는 뭔가를 놓쳤을지도 모른다.

+0

이것은 처음으로 그것을 호출, 나는 그것을 호출하는 세 번째 시간, 그것은 아무것도, 어떤 아이디어를 반환하지 않습니다 왜 이렇게 좋을까요? - http://pastebin.com/kPDfv5Qi – user1522379

+0

@ user1522379 : 메서드 호출에서 반환되지 않거나 빈 문자열을 반환한다고 말하는 것입니까? 그 위치에 빈 문자열이 있는지 데이터를 보셨습니까? –

+0

그것은 빈 문자열을 반환합니다, 나는 PHP 버전에서 동일한 파일을 사용했고 정확하게 값을 반환합니다! 여기에 파일의 예가 나와 있습니다 (별개의 줄에 쓰러 뜨려서 얼마나 많은 null 값이 있는지 알 수 있습니다!) http://gyazo.com/eb309812597cac046d6177bf3d73a3bd.png – user1522379