Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dateien umbennen
GhstEsl
myCSharp.de - Member

Avatar #avatar-2543.jpg


Dabei seit:
Beiträge: 20

Themenstarter:

Dateien umbennen

beantworten | zitieren | melden

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]);
}
private Nachricht | Beiträge des Benutzers
r00t
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Schwäbisch Gmünd

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Cord Worthmann
myCSharp.de - Member



Dabei seit:
Beiträge: 1205

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
VizOne
myCSharp.de - Member

Avatar #avatar-1563.gif


Dabei seit:
Beiträge: 1551

beantworten | zitieren | melden

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

MfG VizOne
private Nachricht | Beiträge des Benutzers
Maxigraf
myCSharp.de - Member



Dabei seit:
Beiträge: 39

beantworten | zitieren | melden

um defrag mal wieder etwas arbeit zu geben vielleicht? ;-)
private Nachricht | Beiträge des Benutzers
GhstEsl
myCSharp.de - Member

Avatar #avatar-2543.jpg


Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

GetFiles gibt ein string Array zurück und kein FileInfo Objekt.
string[] s = Directory.GetFiles(pfad);
foreach(string str in s)
{
	Console.WriteLine(str);
}
private Nachricht | Beiträge des Benutzers
VizOne
myCSharp.de - Member

Avatar #avatar-1563.gif


Dabei seit:
Beiträge: 1551

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Cord Worthmann
myCSharp.de - Member



Dabei seit:
Beiträge: 1205

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
r00t
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Schwäbisch Gmünd

beantworten | zitieren | melden

ä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
private Nachricht | Beiträge des Benutzers
GhstEsl
myCSharp.de - Member

Avatar #avatar-2543.jpg


Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

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:
Zitat
Unrecognized escape sequence
woran liegt das?
private Nachricht | Beiträge des Benutzers
r00t
myCSharp.de - Member



Dabei seit:
Beiträge: 141
Herkunft: Schwäbisch Gmünd

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers