Thanks for the code sample: JSOP is right, you can't assume that an Int is 32 bits (you have been lucky), and you very definitely can't assume that a string in .NET is the same as a "string" in your file.
The chances are that a "string" in your file is actually a null terminated sequence of ASCII characters, rather than a .NET string stored as binary.
I would not use a binary reader, but read the file into a byte array:
stream stream = new MemoryStream(Properties.Resources.war3map);
byte[] data = stream.ToArray();
I would then process it manually (after I had had a good look at it: your description implies there is a mixture of big- and little-endian numbers in there by listing an input as specifically little-endian)
"Here some code sample in c? http://www.google.com/codesearch/p?hl=en#g5UVg0xXXBU/trunk/ghost/map.cpp&q=w3i&l=478 does it help does c# have something like getline?"
It does have line reading capabilities, yes - but not in the sense you mean. Your getline is terminated by a parameter character - in this case a null - which is not available in standard C# AFAIK. .NET line based routines always use a System.Newline terminator, which cannot be changed.