Tutorial :C# File.ReadallText doing weird things


What I'm trying do is read all the text in a file and if it contains the word "Share" do a regex. Here is the code:

DirectoryInfo dinfo = new DirectoryInfo(@"C:\Documents and Settings\g\Desktop\123");          FileInfo[] Files = dinfo.GetFiles("*.txt");          foreach (FileInfo filex in Files)          {              string contents = File.ReadAllText(filex.FullName);              string matchingcontants = "Share";              if (contents.Contains(matchingcontants))              {                  string sharename = Regex.Match(contents, @"\+(\S*)(.)(.*)(.)").Groups[3].Value;                  File.AppendAllText(@"C:\sharename.txt", sharename + @"\r\n");              }            }  

When I debug I get... contents = "\r\0\n\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0=\0\r\0\n\0+\0S\0h\0a\0r\0e\0 \0\\0\\0j\05\02\0\\0w\0w\0w\0_\0O\0n\0t\


Not Share. Any hints? tips or suggestions?


Looks like you've got a file which is saved as UTF-16 (i.e. Encoding.Unicode). Read the file with the right encoding, and all should be well.

Fortunately there's an overload of File.ReadAllText which takes an encoding:

string contents = File.ReadAllText(filex.FullName, Encoding.Unicode);  

Unfortunately, that will then do the wrong thing for files which aren't in UTF-16. While there are heuristic ways of guessing the encoding, ideally you should know the encoding before you open the file.


Looks like it's a Unicode file, and you're trying to read it as plain ASCII.


My guess is that the encoding is not set correctly, you might need to use ReadAllText(String, Encoding) specifying the encoding.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »