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.

War es hilfreich?

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)
     ...
 }

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top