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? 😦
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 😄)!
/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
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