recebo um erro “System.Array não contém uma definição para LastWriteTime”
-
28-10-2019 - |
Pergunta
Estou tendo um problema com meu código c # e não consigo fazer minha instrução if funcionar. Acho que ela está tentando fazer referência à parte errada do código por algum motivo.Verifiquei se tenho todas as referências corretas e todos os usos corretos. Colei o código ofensivo abaixo:
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);
}
}
qualquer ajuda que pudesse ser dada seria muito apreciada, obrigado.
Solução
O que você quer fazer provavelmente é isso?
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);
}
}
Outras dicas
Bem, fi
é uma matriz, portanto, fi.LastWriteTime.Date == DateTime.Today.Date
forneceria esse erro.Corretamente.
Parece que você não usa os diretórios retornados para mais nada, então não posso sugerir uma 'correção'.
Você está chamando LastWriteTime na matriz, e uma matriz não tem essa propriedade.
Você precisa chamar LastWriteTime nos membros da matriz, por exemplo,
fi[0].LastWriteTime
Ou para iterar todos os arquivos:
foreach(var file in fi)
{
if(file.LastWriteTime.Date == DateTime.Today.Date)
{
....
}
}
O erro é simples: você está usando LastWriteTime
no array em vez do item FileInfo.Você deve usar um índice no código como este:
fi[0].LastWriteTime.Date ///your code
substitua 0 pelo seu número de índice ou use-o em um loop 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);
}
}
Conforme afirmado anteriormente, esta propriedade é inválida em uma matriz. Basta incluir seu FileInfo com um loop 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);
}
}
Você precisa
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);
}
}
Está faltando um loop for:
for (int i = 0; i < fi.Length; ++i)
{
if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
...
}