Laden...

Dateien umbennen

Letzter Beitrag vor 19 Jahren 12 Posts 4.916 Views
Dateien umbennen

Hi, ich möchte gerne bei allen Bilder in einem Ordner, die folgendermasen benannt sind:
PICT_(4StelligeZahl)
das _ durch ein leerzeichen ersetzen, und alle bei denen die 4Stellige Zahl größer ist als 1000 in den Ordner 1 verschieben, und alle die größer sind als 2000 in den Ordner 2 verschieben usw.
ich habe es bis jetzt nur gepackt, dass alle dateien ausgelesen werden, und nur der dateiname angezeigt wird, wie schaffe ich es, dass die dateien umbenannt und dann verschoben werden?
Hier mal mein Code:

string path = @"c:\bilder\";
string[] dateien = Directory.GetFiles(path);
for(int i = 0; i != dateien.Length; i++)
{
	string dateiname = Path.GetFileNameWithoutExtension(dateien[i]);
}

die methode die du brauchst heißt "move"

System.IO.File.Move(strOldFilename, strNewFilename);

hoffe das hilf dir weiter.

gruß,

r00t

EDIT: strOldFilename wäre dann bei dir dateiname .

posted by the real prince of persia

naja, und das ersetzen der zeichen erledigst du, in dem du die datei ins selbe verzeichnis kopierst und zuvor den namen durch replace änderst.
danach muss dann natürlich die alte datei gelöscht werden.



foreach (FileInfo file in Directory.GetFiles(path))
{
    file.CopyTo(file.Name.Replace('_', ' '));
    file.Delete();
}


grtz
chief

Naja, besser wie r00t schon sagte mit Move. Wozu kopieren?

MfG VizOne

um defrag mal wieder etwas arbeit zu geben vielleicht? 😉

hab das mal versucht, aber ich bekomme bei der zeile:

foreach (FileInfo file in Directory.GetFiles(path))

folgende Fehlermeldung:

"Cannont convert type 'string' to 'System.IO.FileInfo"

ich hab auch kenie Ahnung, wie ich den Typ ändern soll

GetFiles gibt ein string Array zurück und kein FileInfo Objekt.

string[] s = Directory.GetFiles(pfad);
foreach(string str in s)
{
	Console.WriteLine(str);
}

Entweder


foreach(string fileName in Directory.GetFiles("dasVerzeichnis"))
{
  //...
}

oder


foreach(FileInfo fileInfo in new DirectoryInfo("dasVerzeichnis").GetFiles())
{
  //...
}

Siehe MSDN. Ersteres ist schneller und in der Regel ausreichend, um damit weiterzuarbeiten. (Nur wenn man von allen Dateien die Größe haben will etc. sollte man die zweite Variante wählen).

MfG VizOne

Naja, besser wie r00t schon sagte mit Move. Wozu kopieren?

ich wollte nur mal eure aufmerksamkeit testen...
*g*

war natürlich quatsch, mein vorschlag - beachtet aber auch die fortgeschrittene stunde und all die ganzen feierabend-bierchen!

grtz
chief

ähm wozu brauchst du FileInfo? wenn du lediglich durch alle dateien möchtest dann:


string[] files = Directory.GetFiles(dir);

for(int i=0; i < files.Length; i++)
{
   dateiname = files[i];
   .
   .
   .
}

posted by the real prince of persia

danke ging, jetzt habe ich nur noch eine frage zu Regular Expression.
wie teste ich, ob ein sting mit _ anfängt?
normal müsste es ja so gehen:
new Regex("(^_)");
da wenn ein Backslash vorrausgesetzt der Unterstrich ja als normaler unsterstrich zählt, aber ich bekomme folgende fhlermeldung:

Unrecognized escape sequence

woran liegt das?

int start = dateiname.firstindexof("_");

start entspricht die stelle in der zeichenkette wo das zeichen, also "_" auftaucht.

und falls du wissen möchtest ob überhaupt das zeichen auftaucht:

if(dateiname.indexof("") ≥ 0) oder if(!(dateiname.indexof("") < 0))
{
.
.
.
}

gruß,

r00t

posted by the real prince of persia