Nur *.txt Dateiformate kopieren



  • public class SimpleFileCopy
    {
        static void Main()
        {
            string fileName = "test.txt";
            string sourcePath = @"C:\Hans\";
            string targetPath = @"C:\Hans\Copy\";
    
            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);
    
            if (System.IO.Directory.Exists(sourcePath))
            {
                if (System.IO.Directory.Exists(destFile))
                {
                    System.IO.File.Copy(sourceFile, destFile, true);
                }
                else
                {
                    Console.WriteLine("Zielpfad nicht vorhanden");
                }
            }
                else
    
                {
                Console.WriteLine("Quellpfad nicht vorhanden!");
    
                }
    
            Console.WriteLine("Drücken Sie eine beliebige Taste.");
            Console.ReadKey();
    
         }
    
    }
    

    Wie mache ich das das der alle *.txt dateien vom Quellpfad kopiert aber nur die txt dateien nicht alles was im ornder is
    danke



  • string fileName = "*.txt";
    

    ? Weiß nicht, ob die C#-***** Wildcards kennt.. sollte sie aber eigentlch.

    Ansonsten alle Dateien in dem Ordner durchgehen und wenns ne txt ist, diese dann löschen. :xmas1: :xmas2:



  • und wenn da eine 100GB grosse datei ist wird die erst kopiert und dann geloescht - na klar #gg

    hol dir erst eine dateiliste mit GetFiles() und ueberpruefe die, und kopiere dann datei fuer datei - duerfte ein 3 zeiler sein

    probier aber erstma wie schon gesagt wurde mit dem wildchar

    string sourceFile = System.IO.Path.Combine(sourcePath, ".txt");
    string destFile = System.IO.Path.Combine(targetPath, "
    .txt");



  • Mr Evil schrieb:

    und wenn da eine 100GB grosse datei ist wird die erst kopiert und dann geloescht - na klar #gg

    In welchem Zusammenhang steht das Statement jetzt 😕



  • na du sagtest doch

    Machine schrieb:

    Ansonsten alle Dateien in dem Ordner durchgehen und wenns ne txt ist, diese dann löschen.

    das suggeriert doch das die daten erst alle kopiert werden und die nicht benoetigten dann geloescht werden koennen - ich glaub kaum das alle dateien ausser txt files im original folder geloescht werden sollen {o;



  • guten morgen
    erst mal thx das ihr mir versucht zuhelfen...

    also ich hab das jetzt ausprobiert

    string sourceFile = System.IO.Path.Combine(sourcePath, ".txt");
    string destFile = System.IO.Path.Combine(targetPath, "
    .txt");

    aber hat leider nicht geklappt 😞 und leider bin ich nicht so der burner in proggen 😕 bin noch in der lern phase ^^

    lg tun



  • Mr Evil schrieb:

    na du sagtest doch

    Machine schrieb:

    Ansonsten alle Dateien in dem Ordner durchgehen und wenns ne txt ist, diese dann löschen.

    das suggeriert doch das die daten erst alle kopiert werden und die nicht benoetigten dann geloescht werden koennen - ich glaub kaum das alle dateien ausser txt files im original folder geloescht werden sollen {o;

    Neee ich meine, dass man das Source-Directory durchsucht und schaut: "Ist die aktuelle Datei ein txt?" -> ja: kopieren, nein: nicht kopieren. 😉



  • achsoo - na denn - hab ich nix gesagt

    @Tun

    mach am besten folgendes, ich bitte aber zu beachten das es ungetesteter pseudocode aus dem kopf ist #gg

    CopyFiles("D:\SourcePath", "D:\TargetPath", "txt", true);
    
    public void CopyFiles(string sourcePath, string targetPath, string extension, bool overwrite)
    {
        if(!Directory.Exists(sourcePath))
            throw new Exception("The source path " + sourcePath + " does not exist");
        if(!Directory.Exists(targetPath))
            Directory.CreateDirectory(targetPath);
    
        string[] files = Directory.GetFiles(sourcePath);
        foreach(string file in files)
        {
            if(!file.EndsWith(extension))
                continue;
            File.Copy(Path.Combine(sourcePath, file), Path.Combine(targetPath, file), overwrite);
        }
    }
    


  • hi

    bei der code zeile

    File.Copy(Path.Combine(sourcePath, file), Path.Combine(targetPath, file), overwrite);

    kommt der fehler hier

    Der Prozess kann nicht auf die Datei C:\Hans\test.txt zugreifen, da sie von einem anderen Prozess verwendet wird.

    Argh das was du gemacht hast ist einleuchtend das muss eigendlich funktzen mhhh



  • tja, dh die datei ist gesperrt - vermutlich im editor offen oder aehnliches?
    kannst mit dem "Unlocker" schauen welcher prozess dieses verwendet {o;



  • ne editor ist geschlossen und der ordner hans und die drin entahltenen dateies sind erstmal nur fake dateien zum testen also können die nicht gesperrt sein



  • frag trotzdem einfach mal nach - besorg dir den unlocker und schau mal nach
    (schau am besten nach _waehrend_ der fehler angezeigt wird!)

    machst du in der exe selber vor dem kopieren auch noch etwas anderes?



  • Frohes neues an alle ^^

    Nein gar nicht ...:(
    wie meinst du das mit dem unlocker?



  • da gibts n tool was so heisst - damit kannst du alle dateien pruefen lassen was sie sperrt - auch freigeben usw - frag google - auf der homepage ist alles gut erklaert

    was passiert wenn du das GetFiles() weg laesst und die datei mal hardcoded kopierst?



  • er sagt
    Die Zieldatei D:\Hans\Copy ist keine Datei, sondern ein Verzeichnis.
    wenn ich das hier mache

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    
    namespace Optiker_Gilde_Konverter
    {
    
            public class ClassDateihandling
            {
                public void CopyFiles(string sourcePath, string targetPath, string extension, bool overwrite)
                {
    
                    if (!Directory.Exists(sourcePath))
                        Console.WriteLine("The source path " + sourcePath + " does not exist");
    
                    if (!Directory.Exists(targetPath))
                        Directory.CreateDirectory(targetPath);
    
                    //string[] files = Directory
    
                   // foreach (string file in files)
                    //{
    
                       // if (file.EndsWith(extension))
                       // {
    
                            File.Copy (Path.Combine(sourcePath,extension), (targetPath), true);
                            //continue;
                       // }
                   // }
                }
    
                public bool RenameFile(string filename)
                {
                    return true;
                }
            }
        }
    


  • das komische ist ja ich kann die text datei manuel löschen umbennen usw aber wenn ich die mit c# verschieben will sagt der das irgen ein prozess drauf zugreift ...hab alles ausprobiert hab auch die txt gelöscht un nochmal erstellt :(((



  • Naja ist ja auch klar, das ist ja auch keine datei sondern wirklich ein Verzeichnis. Und in dem Moment wo du drauf zugreifen willst/kopieren willst, sitzt doch auch ein Prozess drauf, nämlich du selber.



  • @ Firefighter

    wie kann ich das umgehen könntest mir mir da vllt helfen ?



  • bei deinem test, hast du da auch eine richtige datei angegeben fuer die "extension" variable?
    also ist der aufruf:
    fileHandling.CopyFiles("C:\\Hans", "D:\\Hans", "test.txt", true);
    ?
    wenn nicht ergibt dein test kein sinn {o;



  • ja hab ich

    public class Optiker_Gilde
    {
        static void Main()
        {
            ClassDateihandling cd = new ClassDateihandling();
    
            string fileName = "test.txt";
            string sourcePath = @"D:\Hans\";
            string targetPath = @"D:\Hans\Copy";
            //string newFileName = "atest.txt";
    
            cd.CopyFiles(sourcePath, targetPath, fileName, true);
            cd.RenameFile(sourcePath1,newFileName);
    
        } 
    
    }
    

    sogar das RenameFile funktz nicht ich kack hier voll ab :,(


Anmelden zum Antworten