2010-09-22 9 views
1

Y at-il un moyen de lancer une nouvelle exception sur le nombre maxmium de fichiers dans un répertoire?Erreur sur le nombre maximal de fichiers

+4

Votre question est très vague. S'il vous plaît soyez plus précis, et lisez http://tinyurl.com/so-hints. –

+0

Qu'avez-vous essayé de faire lorsque vous avez atteint le nombre maximum de fichiers dans un répertoire? Ecrire de nouveaux fichiers? – chakrit

+0

Je suppose qu'il y aura une exception, ou une erreur sur la création du fichier suivant par le système. Voulez-vous dire une limite définie par logiciel? Que voulez-vous faire sur cette exception? Ecrivez le fichier ailleurs? Il suffit ensuite de structurer vos répertoires à l'avance pour éviter cette situation (avec la date, ou un compteur dans le nom du répertoire) ... – pascal

Répondre

1

Non, il n'y en a pas:

vous pouvez l'attraper avec un plus générique

System.IO.IOException 

Et lire le message (sous-jacent) vous pourriez lancer une exception auto-écrite à partir de ce point.

MISE À JOUR I just learned. que vous utilisez la propriété

bool isfull = info.GetFiles().LongLength == 4.294.967.295 

. Malheureusement, il va manger toute votre mémoire.

donc en utilisant

DirectoryInfo.EnumerateFiles().Count() 

peut-être d'une manière chunked pourrait être une meilleure approche

FYI:

  • 65.534 pour FAT32
  • 4294967295 POUR NTFS

(source)

+0

Je suppose que votre application sera à court de RAM avant de pouvoir assigner 'true' à la variable' isFull'. Juste en tenant les références à ces 4 milliards d'entrées dans le tableau consommer 4 Go, et c'est excluant les chaînes réelles ... –

+0

lol, j'ai ajouté une explication. –

1

Je ne connais pas précisément C#, mais je sais que Java n'a pas d'exception spécifique ou d'erreur à lancer pour un lecteur complet. Je suggère simplement de faire votre propre classe d'exception et de l'utiliser. Je suggère d'appeler un FullDirectoryError ou DirectoryOverflowError, en supposant que c'est assez sérieux pour être appelé une erreur.

0

Quelque chose comme ça?

public static void checkFileNumber(string directoryToCheck, int maxNumber) 
{ 
    if (Directory.Exists(directoryToCheck)) 
    { 
     if (Directory.GetFiles(directoryToCheck).Length > maxNumber) 
     { 
      throw new Exception("Too many files in " + directoryToCheck); 
     } 
    } 
} 

Assurez-vous use System.IO; :-)

+0

quel est le nombre maximum d'un répertoire? – Ata

+0

Le code que j'ai posté lève une exception quand il y a plus de maxNumber de fichiers (vrais fichiers et pas de répertoires) dans directoryToCheck. –

+0

Maintenant, j'ai compris: La limite dépend du type de système de fichiers. Une recherche rapide a révélé ces limites: FAT16 512 entrées, FAT32 65 534 entrées, NTFS 4 294 967 295 entrées –

0

Lancer des exceptions est une action coûteuse; Quand vous pouvez l'éviter, faites-le s'il vous plaît. Essayez de programmer défensivement si c'est possible. Mais lorsque vous en lancez un, vous devez fournir une capture correspondante sur une exception spécifique. Comme Casper Kleijne l'a dit, vous pourriez attraper IOException mais pourquoi en premier lieu voulez-vous attraper quand même? Quelle est l'action compensatoire dans la capture?

Veuillez fournir plus d'informations sur ce que vous voulez réaliser avec.

Questions connexes