2017-05-23 2 views
0

Ich habe eine GUI-Anwendung (VB.NET) der Benutzer wird nach Datei in einem vordefinierten Verzeichnis suchen und es an ein vordefiniertes Ziel kopieren. Für jede Datei, nach der der Benutzer sucht, gibt es zwei Dateien mit ALMOST, die den gleichen Namen, aber unterschiedliche Dateigrößen haben. In 80% der Fälle ist dies der Fall und in 20% ist nur eine Datei verfügbar.Dateien kopieren; zwei Dateien haben fast den gleichen Namen, ich möchte die größere Datei kopieren

Zum Beispiel gibt es zwei Dateien "12345-A" und "12345-B". Was ich will ist, wenn der Benutzer nur mit "12345" sucht, vergleicht die Anwendung A und B und kopiert die größere Größe und wenn es nur A oder B gibt, kopieren Sie einfach, was verfügbar ist. A & B sind nicht konstant - könnten irgendwelche Buchstaben sein.

Ich bin mir nicht sicher, wie ich anfangen soll, aber ich habe die GUI einfach mit einem Textfeld zur Eingabe des Dateinamens (zu suchen) und textBox für den neuen Namen und Start Copy Button gestaltet. Ich benutze:

My.Computer.FileSystem.CopyFile( 
    string to copy, 
    destination, 
    FileIO.UIOption.OnlyErrorDialogs, 
    FileIO.UICancelOption.DoNothing 
) 

Irgendwelche Ideen?

+0

Kann ich einige Dinge wie die Suche nach Dateien, Dateinamen enthalten "12345" und vergleichen Sie sie und kopieren Sie die größere Datei. Wenn es mehr als 2 Dateien Fehlermeldung (Suche nicht gültig), wenn es eine Datei Übereinstimmungen gibt dann kopieren Sie die Datei. –

+1

Verwenden Sie DirectoryInfo.GetFiles (Muster) dann mit dem resultierenden Array von FileInfo bestellen Sie es für die Größe, nehmen Sie die erste – Steve

+0

Hallo Steve, danke für die schnelle Antwort, das klingt genau das, was ich will, aber ich bin neu in der Programmierung, können Sie erarbeiten mehr über "resulting Array von FileInfo bestellen Sie für die Größe, nehmen Sie die erste"? –

Antwort

0

Mit der Klasse DirectoryInfo können Sie die Dateien im Quellordner abrufen, die dem angegebenen Muster entsprechen. Das resultierende Array von FileInfo Objekten kann durch die Length Eigenschaft in absteigender Reihenfolge bestellt werden und schließlich könnte das erste als die Quelldatei für die Kopie verwendet werden.

Dim di = new DirectoryInfo("your_source_directory_with_files") 
Dim sourceFile = di.GetFiles("12345*.*"). 
        OrderByDescending(Function(x) x.Length). 
        FirstOrDefault() 

if sourceFile IsNot Nothing Then 
    Dim destFile = Path.Combine("your_destination_directory", sourceFile.Name) 
    My.Computer.FileSystem.CopyFile(sourceFile.FullName, destFile, 
        FileIO.UIOption.OnlyErrorDialogs, 
        FileIO.UICancelOption.DoNothing) 
End If 
+0

Wenn ich richtig verstanden habe, kann ich var nicht benutzen, wenn ich Quelldatei definiere "Fehler Var wird nicht deklariert" daher habe ich Dim verwendet, dann versuche zu kopieren, es funktioniert nicht, da die Quelldatei als Dateiinfo und nicht als String definiert wurde Kopieren. Irgendeine Idee @steve? –

+0

Ja, tut mir leid, meine Fehler. Jetzt sollte ok sein – Steve

+1

danke für die Korrektur, ich fand tatsächlich etwas kürzer Ich entfernte alle IF .... etc und ersetzte es mit Sourcefile.CopyTo ("Mein Ziel") –

Verwandte Themen