Domanda

Ho un problema con il mio codice c # Non riesco a far funzionare la mia istruzione if Penso che stia cercando di fare riferimento alla parte sbagliata del codice per qualche motivo.Ho verificato di avere tutti i riferimenti corretti e tutti gli usi corretti. Ho incollato il codice offensivo qui sotto:

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

qualsiasi aiuto che potrebbe essere dato sarebbe molto apprezzato grazie.

È stato utile?

Soluzione

Quello che vuoi fare è probabilmente questo?

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

Altri suggerimenti

Bene, fi è un array quindi fi.LastWriteTime.Date == DateTime.Today.Date darebbe quell'errore.Correttamente.

Non sembri utilizzare le directory restituite per nient'altro, quindi non sono in grado di suggerire una "correzione".

Stai chiamando LastWriteTime sull'array e un array non ha questa proprietà.

Devi chiamare LastWriteTime sui membri dell'array, ad esempio

fi[0].LastWriteTime

O per iterare su tutti i file:

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

L'errore è semplice, stai usando LastWriteTime su array invece dell'elemento FileInfo.Dovresti usare un indice nel codice come questo:

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

sostituisci 0 con il tuo numero indice o usalo in un ciclo foreach come questo:

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

Come affermato in precedenza, questa proprietà non è valida su un array. Racchiudi semplicemente il tuo FileInfo con un ciclo 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);
   }
 }

Hai bisogno di

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

Ti manca un ciclo for:

 for (int i = 0; i < fi.Length; ++i)
 {
     if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
     ...
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top