user222427
user222427

Reputation:

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\

\0S\0h\0a\0r\0e\

Not Share. Any hints? tips or suggestions?

Upvotes: 3

Views: 2805

Answers (3)

BarrettJ
BarrettJ

Reputation: 3431

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

Upvotes: 2

Jon Skeet
Jon Skeet

Reputation: 1500425

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.

Upvotes: 7

Anon.
Anon.

Reputation: 59973

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

Upvotes: 2

Related Questions