Laden...

Dateien umbenennen: Probleme mit Angabe der Extension

Erstellt von Raze vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.406 Views
R
Raze Themenstarter:in
4 Beiträge seit 2009
vor 15 Jahren
Dateien umbenennen: Probleme mit Angabe der Extension

Hallo!

Ich hab mir ein kleines programm gemacht, dass mir dateien mithilfe von File.Move() umbenennt.
Anfangs hab ich die dateiendung fix im code festgelegt, weil ichs nur für diese dateien gebraucht habe. Jetzt wollt ich dem user die möglichkeit geben, sich selbst die dateiendungen aus zu suchen = Nix geht mehr.

Alter code (funktioniert):


string sPfad = txtDirectoryName.Text;
List<FileInfo> GefDateien = cDateienSuchen.SucheNachDateien(sPfad, true, ".rar.htm" );
                
                
                foreach (FileInfo fi in GefDateien)
                {
                    
                    string SourceFileName = fi.FullName;
                    string NewFileName = Path.ChangeExtension(SourceFileName, "");

                    
                    //Datei Umbenennen
                    File.Move(SourceFileName, NewFileName);
                        
                 }

Neuer code (funktioniert nicht):


string sOldExtension = txtOldExt.Text; //wird aus textbox übergeben
string sPfad = txtDirectoryName.Text; //wird aus textbox übergeben
List<FileInfo> GefDateien = cDateienSuchen.SucheNachDateien(sPfad, true, "." + sOldExtension);
                
                
                foreach (FileInfo fi in GefDateien)
                {
                    
                    
                    string SourceFileName = fi.FullName;
                    string sNewExtension = txtNewExt.Text; //wird aus textbox übergeben
                    string NewFileName = Path.ChangeExtension(SourceFileName, "." + sNewExtension);

                    //Datei Umbenennen
                    File.Move(SourceFileName, NewFileName);
                        
                    }

Beim debugging überspringt er jetzt aufeinmal alles was in der foreach schleife steht.
Was hab ich denn da falsch gemacht? 😦

R
234 Beiträge seit 2007
vor 15 Jahren

Der Fehler wird wohl in SucheNachDateien() liegen. GefDateien ist dementsprechend leer und die Schleife wird nicht durchlaufen. Setze dir am Besten mal einen Breakpoint in die genannte Methode und durchlaufe sie Schritt für Schritt um den Fehler zu lokalisieren.

/Edit: Willkommen auf myCSharp.de (das wollte ich immer schon mal sagen 😄)!

R
Raze Themenstarter:in
4 Beiträge seit 2009
vor 15 Jahren

/Edit: Willkommen auf myCSharp.de (das wollte ich immer schon mal sagen 😄)!

Danke! ^^

Der Fehler wird wohl in SucheNachDateien() liegen. GefDateien ist dementsprechend leer und die Schleife wird nicht durchlaufen. Setze dir am Besten mal einen Breakpoint in die genannte Methode und durchlaufe sie Schritt für Schritt um den Fehler zu lokalisieren.

Ich hab darin keinen fehler finden können. Die methode bekommt auch alle strings die sie braucht, also hab gedacht daran kanns nicht liegen.

Er nimmt anscheinend nur den string an wie er hier steht...

string NewFileName = Path.ChangeExtension(SourceFileName, ".txt");

...anstatt der deklaration.

string NewFileName = Path.ChangeExtension(SourceFileName,"." + sNewExtension);

Ich hab mir vorgestellt dass er die strings mit dem "+" verbindet. Anscheinend is das wiedermal zu einfach 😕

Hier der code der "SucheNachDateien" methode, falls er dich interessiert:

#region Dateien Suchen
        public static List<FileInfo> SucheNachDateien(string sStartPfad, bool bRekursiv, string sFilter)
        {
            DirectoryInfo tDir = new DirectoryInfo(sStartPfad);
            FindDirs(tDir, sFilter, bRekursiv);
            return GefundeneDateien;
        }
        #endregion

        #region Ordner Suchen
        public static void FindDirs(DirectoryInfo ParentDir, string sFilter, bool bRekursiv)
        {
            List<FileInfo> Ergebnis = new List<FileInfo>();
            Meldungen.Add("Durchsuche nach Verz." + ParentDir.ToString());
            if (bRekursiv)
            {
                try
                {
                    foreach (DirectoryInfo GefDir in ParentDir.GetDirectories())
                    {
                        Meldungen.Add("Verzeichnis '" + GefDir.ToString() + "' gefunden.");
                        FindDirs(GefDir, sFilter, bRekursiv);
                    }
                }
                catch (UnauthorizedAccessException)
                {
                    //Fehlerbehandlung
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }

            }
}
#endregion
344 Beiträge seit 2006
vor 15 Jahren

Hallo


public static List<FileInfo> SucheNachDateien(string sStartPfad, bool bRekursiv, string sFilter)
        {
            DirectoryInfo tDir = new DirectoryInfo(sStartPfad);
            FindDirs(tDir, sFilter, bRekursiv);
            return GefundeneDateien;
        }
        #endregion


Was ist denn in:


return GefundeneDateien;

Ich sehe im ganzen Code nirgends, dass du diesem Bezeichner eine List<FileInfo> zuweist.

Geh doch den Code mal Schritt für Schritt mit F11 durch dann wirst du schon sehen wo es klemmt.

Gruss Lothi