Does FileInfo.Extension return the last *.* pattern, or something else?

c#, file-extension, fileinfo, string

Solution

It will return .gz, but the explanation from MSDN (FileSystemInfo.Extension Property) isn't clear why:

"The Extension property returns the FileSystemInfo extension, including the period (.). For example, for a file c:\NewFile.txt, this property returns ".txt"."

So I looked up the code of the `Extension` property with reflector:

public string Extension
{
    get
    {
        int length = this.FullPath.Length;
        int startIndex = length;
        while (--startIndex >= 0)
        {
            char ch = this.FullPath[startIndex];
            if (ch == '.')
            {
                return this.FullPath.Substring(startIndex, length - startIndex);
            }
            if (((ch == Path.DirectorySeparatorChar) || (ch == Path.AltDirectorySeparatorChar)) || (ch == Path.VolumeSeparatorChar))
            {
                break;
            }
        }
        return string.Empty;
    }
}

It's check every char from the end of the filepath till it finds a dot, then a substring is returned from the dot to the end of the filepath.

Problem

I'm curious what exactly the behavior is on the following: ``` FileInfo info = new FileInfo("C:/testfile.txt.gz"); string ext = info.Extension; ``` Will this return ".txt.gz" or ".gz"? What is the behavior with even more extensions, such as ".txt.gz.zip" or something like that? EDIT: To be clear, I've already tested this. I would like an explanation of the property.

Original source