aparece un error "System.Array no contiene una definición de LastWriteTime"
-
28-10-2019 - |
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.
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)
...
}