Ich erhalte die Fehlermeldung "System.Array enthält keine Definition für LastWriteTime".
-
28-10-2019 - |
Frage
Ich habe ein Problem mit meinem C # -Code. Ich kann meine if-Anweisung anscheinend nicht zum Laufen bringen. Ich denke, sie versucht aus irgendeinem Grund, auf den falschen Teil des Codes zu verweisen.Ich habe überprüft, ob ich die richtigen Referenzen in und die richtigen Verwendungen in habe. Ich habe den folgenden Code eingefügt:
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);
}
}
Jede Hilfe, die gegeben werden könnte, wäre dankbar, danke.
Lösung
Was Sie wahrscheinlich tun möchten, ist dies?
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);
}
}
Andere Tipps
Nun, fi
ist ein Array, also würde fi.LastWriteTime.Date == DateTime.Today.Date
diesen Fehler geben.Richtig.
Sie scheinen die zurückgegebenen Verzeichnisse nicht für andere Zwecke zu verwenden, daher kann ich keine Korrektur vorschlagen.
Sie rufen LastWriteTime für das Array auf, und ein Array verfügt nicht über diese Eigenschaft.
Sie müssen LastWriteTime für die Mitglieder des Arrays aufrufen, z. B.
fi[0].LastWriteTime
Oder um alle Dateien zu durchlaufen:
foreach(var file in fi)
{
if(file.LastWriteTime.Date == DateTime.Today.Date)
{
....
}
}
Der Fehler ist einfach. Sie verwenden LastWriteTime
für ein Array anstelle des FileInfo-Elements.Sie sollten einen Index im Code wie folgt verwenden:
fi[0].LastWriteTime.Date ///your code
Ersetzen Sie 0 durch Ihre Indexnummer oder verwenden Sie sie in einer foreach-Schleife wie folgt:
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);
}
}
Wie bereits erwähnt, ist diese Eigenschaft in einem Array ungültig. Schließen Sie einfach Ihre FileInfo mit einer foreach-Schleife ein:
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);
}
}
Sie brauchen
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);
}
}
Ihnen fehlt eine for-Schleife:
for (int i = 0; i < fi.Length; ++i)
{
if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
...
}