ricevo un errore "System.Array non contiene una definizione per LastWriteTime"
-
28-10-2019 - |
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.
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)
...
}