Warum sagt mir die Codeanalyse hier: "Objekte nicht mehrmals entsorgen"?

Auf diesem Code:

public static string Base64FromFileName(string fileName)
{
    try
    {
        FileInfo fInfo = new FileInfo(fileName);
        long numBytes = fInfo.Length;
        FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        BinaryReader br = new BinaryReader(fStream);
        byte[] bdata = br.ReadBytes((int)numBytes);
        br.Close();
        fStream.Close();
        return Convert.ToBase64String(bdata);
    }
    catch(Exception e)
    {
        throw e;
    }
}

... Ich erhalte mit freundlicher Genehmigung von Visual Studio die Warnung "Objekte nicht mehrmals entsorgen ... Um zu vermeiden, dass eine System.ObjectDisposedException generiert wird, sollten Sie Dispose nicht mehr als einmal für ein Objekt aufrufen"in der Zeile" fStream.Close (); "

Warum? Befindet sich fStream in der Zeile darüber, in der der BinaryReader geschlossen ist?

Wäre es nicht besser, wenn ich es sowieso so umgestalten würde:

. . .
using (FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))   
{
    using (BinaryReader br = new BinaryReader(fStream)) 
    {
        byte[] bdata = br.ReadBytes((int)numBytes);
    } //br.Close();
} //fStream.Close();
. . .

?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage