Laden...

Dateien umbennen

Erstellt von GhstEsl vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.894 Views
GhstEsl Themenstarter:in
20 Beiträge seit 2004
vor 19 Jahren
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]);
}
R
139 Beiträge seit 2004
vor 19 Jahren

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

C
1.215 Beiträge seit 2004
vor 19 Jahren

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

1.373 Beiträge seit 2004
vor 19 Jahren

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

MfG VizOne

M
38 Beiträge seit 2004
vor 19 Jahren

um defrag mal wieder etwas arbeit zu geben vielleicht? 😉

GhstEsl Themenstarter:in
20 Beiträge seit 2004
vor 19 Jahren

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

N
4.644 Beiträge seit 2004
vor 19 Jahren

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

string[] s = Directory.GetFiles(pfad);
foreach(string str in s)
{
	Console.WriteLine(str);
}
1.373 Beiträge seit 2004
vor 19 Jahren

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

C
1.215 Beiträge seit 2004
vor 19 Jahren

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

R
139 Beiträge seit 2004
vor 19 Jahren

ä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

GhstEsl Themenstarter:in
20 Beiträge seit 2004
vor 19 Jahren

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?

R
139 Beiträge seit 2004
vor 19 Jahren

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