2011-02-04 15 views
1

Je rencontre un problème avec mon code C# Je n'arrive pas à obtenir mon instruction if pour fonctionner Je pense qu'il essaie de faire référence à la mauvaise partie de code pour une raison quelconque. J'ai vérifié que j'ai toutes les références à droite et tout droit utilise dans j'ai collé le code incriminé ci-dessous.j'obtiens une erreur "System.Array ne contient pas de définition pour LastWriteTime"

FolderBrowserDialog dlg2 = new FolderBrowserDialog(); 
if (dlg2.ShowDialog() == DialogResult.OK) 
//do whatever with dlg.SelectedPath 
{ 

    string searchPattern = "*"; 
    DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath); 
    DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath); 

    DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath); 
    FileInfo[] fi = dir.GetFiles("*", SearchOption.AllDirectories); 
    { 
     if (fi.LastWriteTime.Date == DateTime.Today.Date) 
     { 
      FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories); 
      for (int i = 0; i < sourceFiles.Length; ++i) 
       File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
     } 
    } 

toute aide qui pourrait être donnée serait grandement appréciée grâce.

Répondre

4

Qu'est-ce que vous voulez faire est probablement cela?

 FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories); 
     foreach (FileInfo fi in fis) 
     { 
      if (fi.LastWriteTime.Date == DateTime.Today.Date) 
      { 
       FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories); 
       for (int i = 0; i < sourceFiles.Length; ++i) 
        File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
      } 
     } 
+0

Je pensais que quelque chose comme ça aussi, mais remarque que ' fi' n'est pas utilisé dans la boucle ... –

+0

C'est un bon début, même si le code actuel n'a pas beaucoup de sens (si un fichier dans le dossier sélectionné a un 'LastWriteTime' égal à aujourd'hui, il copi tous les fichiers du dossier source vers le dossier de destination). C'est évidemment ce que le PO a écrit, cependant. –

+0

@Adam: oui, je suis conscient de cela mais je n'y ai pas beaucoup pensé ... :-) –

2

Eh bien, fi est un tableau, donc fi.LastWriteTime.Date == DateTime.Today.Date donnerait cette erreur. Correctement.

Vous ne semblez pas utiliser les répertoires retournés pour autre chose, donc je ne suis pas en mesure de suggérer un 'correctif'.

0

Vous appelez LastWriteTime sur le tableau et un tableau ne possède pas cette propriété.

Vous devez appeler LastWriteTime sur les membres du tableau, par ex.

fi[0].LastWriteTime 

Ou pour itérer sur tous les fichiers:

foreach(var file in fi) 
{ 
    if(file.LastWriteTime.Date == DateTime.Today.Date) 
    { 
     .... 
    } 
} 
0

erreur est simple, vous utilisez LastWriteTime sur la matrice à la place de l'élément FileInfo. Vous devez utiliser un index dans le code comme ceci:

fi[0].LastWriteTime.Date ///your code 

remplacer 0 avec votre index num ou l'utiliser dans une comme boucle foreach ceci:

foreach(var item in fi) 
{ 
      if (item.LastWriteTime.Date == DateTime.Today.Date) 
      { 
       FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories); 
       for (int i = 0; i < sourceFiles.Length; ++i) 
        File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
      } 
} 
0

Comme indiqué précédemment, cette propriété n'est pas valide sur une baie. Il suffit de joindre votre FileInfo avec une boucle foreach:

foreach(FileInfo fi in dir.GetFiles("*", SearchOption.AllDirectories)) 
{ 
    if (fi.LastWriteTime.Date == DateTime.Today.Date) 
    { 
    FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories); 
    for (int i = 0; i < sourceFiles.Length; ++i) 
     File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
    } 
} 
0

Vous devez

foreach(FileInfo fi in dir.GetFiles("*", SearchOption.AllDirectories)) 
{ 
    if (fi.LastWriteTime.Date == DateTime.Today.Date) 
    { 
     FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories); 
     for (int i = 0; i < sourceFiles.Length; ++i) 
      File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
    } 
} 
+0

Et la fonction de 'fi' est .... –

0

Vous êtes missinf une boucle:

for (int i = 0; i < fi.Length; ++i) 
{ 
    if (fi[i].LastWriteTime.Date == DateTime.Today.Date) 
    ... 
} 
Questions connexes