Pregunta

Tengo un problema con mi código c #. Parece que no puedo hacer que funcione mi instrucción if. Creo que, por alguna razón, estoy tratando de hacer referencia a la parte incorrecta del código.He comprobado que tengo todas las referencias correctas y todos los usos correctos. He pegado el código infractor a continuación:

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

Cualquier ayuda que se pueda brindar será agradecida.

¿Fue útil?

Solución

¿Lo que quieres hacer probablemente sea esto?

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

Otros consejos

Bueno, fi es una matriz, por lo que fi.LastWriteTime.Date == DateTime.Today.Date daría ese error.Correctamente.

Parece que no usa los directorios devueltos para nada más, por lo que no puedo sugerir una 'solución'.

Está llamando a LastWriteTime en la matriz y una matriz no tiene esta propiedad.

Debe llamar a LastWriteTime en los miembros de la matriz, p. ej.

fi[0].LastWriteTime

O iterar sobre todos los archivos:

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

El error es simple, está usando LastWriteTime en una matriz en lugar del elemento FileInfo.Debería utilizar un índice en el código como este:

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

reemplace 0 con su número de índice o utilícelo en un bucle foreach como este:

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

Como se indicó anteriormente, esta propiedad no es válida en una matriz. Simplemente incluya su FileInfo con un bucle 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);
   }
 }

Necesitas

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

Falta un bucle for:

 for (int i = 0; i < fi.Length; ++i)
 {
     if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
     ...
 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top