Pergunta

O seguinte código gera um FileNotFoundException (usando .NET 2.0):

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace LazyFileInfoTest
{
    class Program
    {
        static void Main(string[] args)
        {
            File.WriteAllText("Test.txt", "Hello World!");

            DirectoryInfo di = new DirectoryInfo(".");

            FileInfo[] files = di.GetFiles();

            File.Delete("Test.txt");

            foreach (FileInfo fi in files)
            {

                Console.WriteLine(string.Format("{0} Last Modified: {1}", fi.Name, fi.LastWriteTime));
                Console.WriteLine(string.Format("{0} Last Modified: {1}", fi.Name, fi.LastAccessTime));
                //Exception when we reach test.txt
                Console.WriteLine(string.Format("{0} length is: {1}", fi.Name, fi.Length));
            }
        }
    }
}

Parece que a propriedade Length é preguiçoso. Existe alguma razão para que? Esta parece ser uma incoerência, porque não é o caso com outras propriedades. (Veja .NET FileInfo.LastWriteTime & FileInfo.LastAccessTime são errado para um contra-exemplo.)

Graças.

Foi útil?

Solução

De docs para FileInfo.Length :

Quando chamado pela primeira vez, FileInfo chamadas Refrescar e armazena informações sobre o Arquivo. Em chamadas subseqüentes, você deve chamar Refresh para obter a cópia mais recente as informações.

Essa parece ser correta -. Parece que é as outras propriedades sendo ansioso que viola sua documentação

Outras dicas

Na minha opinião, é correto - o objeto fileInfo pode existir mesmo que não existe tal arquivo no sistema de arquivos! Ele ainda pode ter um nome, um diretório et cetera. No entanto, quando você tenta ler seu comprimento, ele precisa ser ligado a item real em sistema de arquivos e ler o comprimento do arquivo.

UPDATE: Além disso, a partir MSDN FileInfo documentação para < em> Comprimento propriedade:

Quando chamado pela primeira vez, FileInfo chamadas Refrescar e armazena informações sobre o arquivo.

Assim, atualização precisa do arquivo para ser posto em prática, caso contrário, você recebe uma exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top