CopyFile Multidata

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    CopyFile Multidata

    Hallo Leute,
    habe ein bekanntes Problem zu dem ich aber keine richtige Lösung finde.

    Mit Filecopy kann ich ja Dateien kopieren, soweit sogut ist auch kein Problem.
    Jetzt habe ich in einem Ordner ca. 200 Dateien die so aussehen *.001

    Diese Dateien muss ich im selben Ordner unter *.001.rdy speichern. Ist das auch in kuzform möglich?

    Mit Filecopy gibt es ja einen Error da * kein gültiges Zeichen in einem Pfad sein kann.

    Bitte um ganz schnelle Hilfe:)

    MfG razzzer530i
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    ja das stimmt, kann sie mir ja auch alle in eine listbox eintragen. Möchte das aber im Hintergrund machen, sodass nichts davon irgendwo erkennbar ist.
    Das ist ja mein Problem :x

    Könnte die so jetzt ein eine Listbox packen und einzeln kopieren von mir aus auch per Hand. Soll aber drignend anders :D
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    soweit ja völlig richtig :D
    Ich glaube ich schildere das Problem falsch.
    Ich kann

    VB.NET-Quellcode

    1. My.Computer.FileSystem.CopyFile("*.001", "*.001.rdy")


    nicht schreiben. * ist ein ungültiges Zeichen.

    Das ist mein Problem. Sorry wenn das falsch rüber kommt. Hab deutlich schwereres programmiert. Weiß nicht woran es hier gerade scheitert :x Sorry
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Daher nimmst du die obige ForEach-Schleife. Diese gibt dir jede Datei im Verzeichnis als String zurück. Und dann musst du sie nur noch kopieren, wofür ich btw. *nicht* den My-Namespace nutzen würde. Setze lieber vollständig auf System.IO:

    VB.NET-Quellcode

    1. Imports System.IO
    2. ...
    3. For Each file As String in Directory.EnumerateFiles(<hier verzeichnis einsetzen>)
    4. File.Copy(file, file + ".rdy")
    5. Next


    LG :)
    :D Wieder falsch rüber gekommen. Sorry echt.
    Das kopieren ist nicht das ding. Ich habe 500.000 Dateien in dem Ordner. Davon heißen ca 150 "Beispiel.001". Diese 100 will ich raus filtern. und kopieren.

    Da ist mein Problem bei :D

    LG
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    mit .contains(kriterium) kannst du einen String durchsuchen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Habs:

    VB.NET-Quellcode

    1. Private Sub kopieren()
    2. Dim Datei As String
    3. For Each Datei In Directory.EnumerateFiles("Verzeichnes\")
    4. If Datei.Contains(".001") Then
    5. File.Copy(Datei, Datei + ".rdy")
    6. End If
    7. Next
    8. End Sub



    Danke Leute
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Achso, ja das war wirklich nicht genau beschrieben :D
    Wobei du bei der Variante natürlich das Problem hast, dass auch eine Datei die z.B. meinedatei.001.txt heißt umbenannt wird. Daher würde ich hier mit String.EndsWith() bzw. einer FileInfo arbeiten.

    ichduersie schrieb:

    Achso, ja das war wirklich nicht genau beschrieben :D
    Wobei du bei der Variante natürlich das Problem hast, dass auch eine Datei die z.B. meinedatei.001.txt heißt umbenannt wird. Daher würde ich hier mit String.EndsWith() bzw. einer FileInfo arbeiten.


    Würde ich sehr gerne...
    weiß nur leider nicht wie :D Das ist beides Neuland für mich
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Würde aber direkt noch eine Frage hinterher hauen, falls mir hier jemand helfen kann:

    Ich kopiere ja jetzt die .001 dateien in .001.rdy.

    jetzt möchte ich quasi in einer Schleife abfragen ob zb. datei1.001 und datei1.001.rdy da sind. Wenn das der Fall ist soll nichts passieren. Ist nur datei1.001 da und nicht datei1.001.rdy dann soll etwas passieren.
    nehme jetzt nur die Funktion dafür den Rest des Codes benötigt ihr nicht.

    Habe folgende Funktion:

    VB.NET-Quellcode

    1. Private Sub kopieren()
    2. Dim Datei As String
    3. ProgressBar1.Value = 0
    4. Try
    5. For Each Datei In Directory.EnumerateFiles(pathx) 'pathx ist eine variable die ich mir aus einer Speicherdatei hole
    6. If Datei.Contains(".001") Then
    7. File.Copy(Datei, Datei + ".rdy")
    8. End If
    9. Next
    10. Catch
    11. End Try
    12. ProgressBar1.Value = 100
    13. End Sub

    Jetzt möchte ich natürlich im selben Verzeichnis kontrollieren ob beide Dateien vorhanden sind.
    Falls nur datei1.001 vorhanden ist( Das bedeutet auf meinem Server = eine neue Mail)
    dann soll etwas ausgeführt werden.

    VB.NET-Quellcode

    1. If *.001.exists then 'schreib zurück und kopiere erneuet
    2. else
    3. 'error abfangen usw.
    4. end if


    Jemand eine Idee? Müsste auch relativ leicht sein ich komme nur nicht drauf
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    warum nimmst Du nicht obigen Code von mir oder die Hinweise von @ichduersie und @Fakiz? dann benötigst du nämlich keine zusätzliche Abfrage.

    VB.NET-Quellcode

    1. For Each Datei In Directory.GetFiles(pathx, "*.001")

    das "*.001" in dem code besagt das er ausschließlich Dateien holt, die auf .001 ENDEN (EndsWith)... Du kannst auch "*.001*" benutzen, dann nimmt er alle Dateien, wo .001 drin vorkommt (Contains).

    Ist denke ich, der eleganteste Weg
    "Hier könnte Ihre Werbung stehen..."

    razzzer530i schrieb:

    Dateien kopieren
    oder meinst Du einfach umbenennen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim curFile As String
    2. For Each f As FileInfo In New DirectoryInfo("Pfad zum Ordner").GetFiles("*.001")
    3. curFile = Path.Combine(fi.FullName, (f.Name + ".rdr"))
    4. If File.Exists(curFile) Then
    5. MessageBox.Show("alles klar")
    6. End If
    7. Next

    RodFromGermany schrieb:

    razzzer530i schrieb:

    Dateien kopieren
    oder meinst Du einfach umbenennen?



    Kopieren und mit anderem Namen speichern. Ist aber kein Problem


    Fakiz schrieb:

    VB.NET-Quellcode

    1. Dim curFile As String
    2. For Each f As FileInfo In New DirectoryInfo("Pfad zum Ordner").GetFiles("*.001")
    3. curFile = Path.Combine(fi.FullName, (f.Name + ".rdr"))
    4. If File.Exists(curFile) Then
    5. MessageBox.Show("alles klar")
    6. End If
    7. Next


    fi.fullname ist falsch und in meinem Beispiel hast du "*.rdr" verwendet. Müsste

    VB.NET-Quellcode

    1. curFile = Path.Combine(f.FullName, (f.Name + ".rdy"))

    sein.

    Aber danke hat geholfen :)

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AAABER:

    Ich habe ja 500.000 Dateien
    Beispiel:

    datei1.001
    datei1.002
    datei2.001
    datei2.002
    datei3.001
    datei3.002

    Jetzt kopiere ich ja die *.001 in *.001.rdy. Soweit klappt alles.
    Mit der Abfrage oben frage ich doch nur ob *.001.rdy dateien vorhanden sind. Aber ich muss fragen:

    Sind "datei1.001" und "datei1.001.rdy" da?
    Wenn nur "datei1.001" und nicht "datei1.001.rdy" dann MACHWAS
    Else
    fang von vorne an
    Mach das jetzt für alle .001 dateien.

    Funktioniert das damit?

    müsste das nicht so:

    VB.NET-Quellcode

    1. If File.Exists(curFile) & File.Exists(f.Name) Then



    >>combine kombiniert doch nur 2 strings zu nem pfad. ich muss aber doch prüfen ob beide einzelnen dateien vorhanden sind. das klappt nicht so wie ich es benötige :x
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „razzzer530i“ ()

    Funktioniert alles nicht.

    Wenn ich

    VB.NET-Quellcode

    1. Dim f1 As String
    2. For Each f In Directory.GetFiles(pathx, "*.001")
    3. f1 = (f & "*.rdy")
    4. If File.Exists(f) And File.Exists(f1) Then
    5. MsgBox("alles klar")
    6. Else
    7. End If
    8. Next

    abfrage, funktioniert gar nichts. Der andere Code erzeugt leider nur einen Pfad mit dem ich nichts anfangen kann.

    Weiß wirklich nicht wie ich abfragen kann ob datei1.001 UND datei1.001.rdy da sind.
    Wenn ja soll nix passieren wenn nein dann soll was passien.

    wenn aber zb nur datei1.001 und datei2.001.rdy da sind soll nochmal gefragt werden.
    Das ganze Stecke ich dann in einen Timer allerdings brauche ich Hilfe bei der richtigen Abfrage.

    MfG

    FEHLER gefunden!

    VB.NET-Quellcode

    1. For Each f In Directory.GetFiles(pathx, "*.001")
    2. f1 = (f & "*.rdy") ' Muss: f1=(f & ".rdy")
    3. If File.Exists(f) And File.Exists(f1) Then
    4. MsgBox("alles klar")
    5. Else


    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „razzzer530i“ ()