2013-08-09 3 views
1

Voici le code:Pourquoi je reçois ArgumentException?

t = Environment.GetEnvironmentVariable("UserProfile")+"\\documents"; 
string[] txtfiles = Directory.GetFiles(t, "*.txt",SearchOption.AllDirectories); 
var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x)); 

Je veux obtenir tous les fichiers texte à partir du répertoire des documents et tous les sous-répertoires. Avant que j'ai fait cela change le code était:

string[] txtfiles = Directory.GetFiles(t, "*.txt",SearchOption.AllDirectories); 

Et cela a fonctionné.

Mais j'ai fait ces changements puisque je veux plus tard obtenir la taille du répertoire et d'autres choses. Le problème est que sur la ligne:

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x)); 

Je reçois l'exception:

Second path fragment must not be a drive or UNC name 

La variable t contient: C: \ Users \ bout0_000 \ documents Les variables x contiennent: C : \ Users \ bout0_000 \ documents \ 3DMark \ 3dmarkerror.txt

Alors pourquoi avant que cela fonctionne et après les modifications que j'ai faites dans le code, je reçois une exception?

+2

Vous appelez 'Directory.GetFiles' sur un nom de fichier (txt) pas un répertoire –

+0

grâce travail. – DanielVest

+0

'Je veux plus tard obtenir la taille du répertoire et d'autres choses 'Je pense que si vous demandiez ce que vous voulez vraiment faire, vous obtiendrez de meilleures réponses. http://www.perlmonks.org/?node_id=542341 – I4V

Répondre

2

Vous semblez essayer d'obtenir une liste de fichiers à l'aide Directory.GetFiles sur un nom de fichier et non un chemin d'accès

Je suppose que vous voulez une liste des repertoires qui contenaient les fichiers, vous pouvez utiliser:

var textfiles = txtfiles.Select(x => System.IO.Path.GetDirectoryName(x)).Distinct(); 
0

Sur votre

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, x)); 

le x devrait être le modèle de recherche comme *.txt mais votre x ici n'est pas ainsi l'erreur.

Ainsi, vous pouvez soit fait ce que vous avez fait comme

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, "*.txt", SearchOption.AllDirectories)); 

Ou

var textfiles = txtfiles.SelectMany(x => Directory.GetFiles(t, "*.txt")); 
Questions connexes