Question

Le code suivant génère un FileNotFoundException (en utilisant 2,0 .NET):

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));
            }
        }
    }
}

Il ressemble à la propriété Length est paresseux. Y at-il raison? Cela semble être une incohérence, car il est pas le cas avec d'autres propriétés. (Voir .NET FileInfo.LastWriteTime & FileInfo.LastAccessTime sont mal un contre-exemple).

Merci.

Était-ce utile?

La solution

De la documentation FileInfo.Length :

  

Lors de la première appelé, les appels FileInfo   Actualisez et met en cache des informations sur la   fichier. Lors des prochains appels, vous devez   appeler refresh pour obtenir la dernière version de   les informations.

Cela semble être correct - il semble que ce sont les autres propriétés étant désireux qui porte atteinte à leur documentation

.

Autres conseils

À mon avis, il est correct - l'objet Fileinfo peut exister même si il n'y a pas un tel fichier dans le système de fichiers! Il peut encore avoir un nom, un répertoire et ainsi de suite. Toutefois, lorsque vous essayez de lire sa longueur, il doit être lié à l'élément réel dans le système de fichiers et de lire la longueur du fichier.

Mise à jour: En outre, à partir de documentation MSDN FileInfo < em> Longueur propriété:

  

Lors de la première appelé, les appels FileInfo   Actualisez et met en cache des informations sur la   fichier.

Ainsi, l'actualisation a besoin du fichier pour être mis en place, sinon vous obtenez une exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top