J'obtiens une erreur "System.array ne contient pas de définition pour LastWriteTime"
-
28-10-2019 - |
Question
J'ai un problème avec mon code C # Je n'arrive pas à faire fonctionner ma déclaration IF, je pense qu'il essaie de référencer la mauvaise partie du code pour une raison quelconque. J'ai vérifié que j'ai toutes les bonnes références et toutes les bonnes utilisations. J'ai collé le code offensant ci-dessous:
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 apportée serait appréciée avec reconnaissance.
La solution
Ce que vous voulez faire, c'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);
}
}
Autres conseils
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».
Vous appelez LastWriteTime sur le tableau, et un tableau n'a pas cette propriété.
Vous devez appeler LastWriteTime sur les membres du tableau, par exemple
fi[0].LastWriteTime
Ou pour itérer sur tous les fichiers:
foreach(var file in fi)
{
if(file.LastWriteTime.Date == DateTime.Today.Date)
{
....
}
}
L'erreur est simple que vous utilisez LastWriteTime
sur le tableau au lieu de l'élément FileInfo. Vous devez utiliser un index dans le code comme celui-ci:
fi[0].LastWriteTime.Date ///your code
Remplacez 0 par votre index num ou utilisez-le dans une boucle foreach comme 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);
}
}
Comme indiqué précédemment, cette propriété n'est pas valide sur un tableau. Il suffit de joindre votre fichier 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);
}
}
Vous avez besoin
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);
}
}
Vous êtes Missinf A pour Loop:
for (int i = 0; i < fi.Length; ++i)
{
if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
...
}