Fotosortierprogramm in C#

Gast #3312259
Lesenswert?
• ▲
▼
'n Tag allerseits

Ich versuche gerade meine Fotos automatisch nach datum sortieren zu 
lassen. Im Grunde möchte ich die Fotos vom Ordner C:\Fotos in den Ordner 
C:\Fotos_sortiert\Aufnahmemonat+Jahr_des_Fotos verschieben. Dabei 
möchte ich die EXIF Dateien der Fotos auslesen und je nach Aufnahmemonat 
sollten diese Bilder dann in den jeweiligen Unterordner, sofern 
vorhanden, verschoben werden. Für den Fall, dass der Ordner nicht 
vorhanden ist, sollte ein neuer Ordner erstellt werden. Nun kenne ich 
mich aber nicht allzu gut mit dem auslesen von Dateien usw. aus und 
bräuchte hierbei etwas Hilfe.

mfg Michael
Gast #3312264
Lesenswert?
• ▲
▼
Michael schrieb:
> Im Grunde möchte ich die Fotos vom Ordner C:\Fotos in den Ordner
> C:\Fotos_sortiert\Aufnahmemonat+Jahr_des_Fotos verschieben.

So sind die Ordnernamen für sortiertes Anzeigen ausgesprochen 
ungeeignet, wenn die Reihenfolge sich nicht primär nach dem Monat und 
erst sekundär nach dem Jahr orientieren soll.
Gast #3312268
Lesenswert?
• ▲
▼
Michael schrieb:
> Nun kenne ich mich aber nicht allzu gut mit dem auslesen von Dateien usw.
> aus und bräuchte hierbei etwas Hilfe.

Bevor du jetzt alles aufzählst, was du nicht kannst, sag doch erstmal, 
was du kannst, z.B. welche Programmiersprache du beherrscht, um dein 
Ansinnen evtl. umzusetzen oder warum du nicht fertige Lösungen, wie die 
ExifTools von Phil Harvey einsetzen möchtest.
http://owl.phy.queensu.ca/~phil/exiftool/
Gast #3312275
Lesenswert?
• ▲
▼
Also tut mir leid dass ich mich etwas unklar ausgedrückt habe:

Also ich hatte letztes Jahr als Schulfach (Technische Fachschule) 
Programmieren. Als Programmiersprache kam bei uns nur C# (Konsolen- und 
Forms Anwendungen)zum einsatz. Bisher habe ich Stoppuhren, 
Taschenrechner, Einheiten- und Währungsrechner und einen kleinen Editor 
programmiert. meistens bin ich aber nicht über die Programmierumgebung 
(MS Visual Studio 2010 Express) hinausgekommen.

mfg Michael
Gast #3312450
Lesenswert?
• ▲
▼
Das ist wohl eine Nummer umfangreicher, als die bisherigen Programme.
Wird wohl ein paar Wochen dauern, aber da muss man sich durchbeissen.
In einem guten C# Buch sollte alles nötige beschrieben sein, und für 
Dateibehandlungs-Bibliotheken hilft auch die MS-Online Dokumentation 
weiter.

Also die benötigte Aufgabe in kleine Teile zerlegen, und die 
nacheinander implementieren.
#3312713
Lesenswert?
• ▲
▼
Step one -> Wie liest man eine Datei ein
Step two -> Wie bekomme ich die Dateiinfos
Step three -> Wie speichere ich eine Datei wieder ab (dabei Das Datum an 
Dateinamen anhängen)

Mit einer Schleife den Ordnerinhalt abarbeiten, und fertig.

Schau dir die drei Sachen an, dann solltest du das mit deinem 
Wissensstand schon schaffen.
Gast #3312745
Lesenswert?
• ▲
▼
Brauchst du das Programm, möchtest du das unbedingt schreiben? Oder bist 
du nur an einer Lösung deines Sortierproblems interessiert? Als 
Windows-User kann man das nicht wissen, ...

...aber unter anderen Betriebssystemen kann man dieses Problem mit einer 
Kommandozeile lösen. Du brauchst nur ein Exif-Tool, um das Datum aus der 
Datei zu extrahieren, und dann "mmv" oder etwas ähnliches, um die 
Dateien in die Ordner zu verschieben.
Gast #3312751
Lesenswert?
• ▲
▼
Gerhard schrieb:
> ...aber unter anderen Betriebssystemen kann man dieses Problem mit einer
> Kommandozeile lösen

unter welchen BS gibt es denn keine Kommandozeile wo man das Problem 
nicht lösen könnte? Oder meinst du nur weil du es unter Windows nicht 
kannst, das es damit nicht geht?
Gast #3312768
Lesenswert?
• ▲
▼
Die Windows-Kommandozeile kannst du nicht mit einer vernünftigen Shell 
vergleichen. Du wirst auch sehr sehr selten solche Tools finden, die 
nativ für die Windows-Kommandozeile entwickelt wurden. Die Zielgruppe 
ist einfach zu klein.

Klar kannst du mmv und die exiftools auch unter Windows zum Laufen 
bringen. Dazu sage ich aber nur : "Der Weg zu Jesus führt durch Hingabe 
und Leiden".

Dem Fragesteller empfehle ich das Booten von einer Linux-Live-CD, um von 
dort aus das Windows-Laufwerk zu sortieren und in Ordnung zu bringen.
#3313079
Lesenswert?
• ▲
▼
Gerhard schrieb:
> Brauchst du das Programm, möchtest du das unbedingt schreiben? Oder bist
> du nur an einer Lösung deines Sortierproblems interessiert? Als
> Windows-User kann man das nicht wissen, ...
>
> ...aber unter anderen Betriebssystemen kann man dieses Problem mit einer
> Kommandozeile lösen. Du brauchst nur ein Exif-Tool, um das Datum aus der
> Datei zu extrahieren, und dann "mmv" oder etwas ähnliches, um die
> Dateien in die Ordner zu verschieben.

Das meiste davon sollte auch noch unter cmd gehen. Früher hatte man 
dafür einfache Batch Dateien geschrieben.
Gast #3313633
Lesenswert?
• ▲
▼
Gerhard schrieb:
> Brauchst du das Programm, möchtest du das unbedingt schreiben?


ja ich möchte es unbedingt selbst schreiben. Es gibt zwar haufenweise 
Programme im Internet, die mir diese Arbeit abnehmen können - aber wo 
bleibt da der Spaß? Außerdem möchte ich mich mal wieder in C# 
einarbeiten.

Robert L. schrieb:

> soll er sich jetzt Linux antun, nur um ein paar Files zu sortieren ;-)

mit Linux habe ich an sich keine Probleme aber das Programm sollte ja 
die Fotos auf der Festplatte meines Windows Rechners sortieren. Außerdem 
ist für mich C# wesentlich einfacher.
#3313761
Lesenswert?
• ▲
▼
(gibt zwar C# auch für linux, aber egal...)

Wieviel vom Rad willst denn neu erfinden?

entweder suchst mal nach infos wie/wo die Exif-Infos stehen (zumindest 
mal das Datum)

oder eine library die die exif infos auslesen kann..

der Rest ist ja, naja, 0815 Grundlagen...

dateien suche, verzeichnisse anlegen, verschieben/umbenennen
#3314146
Lesenswert?
• ▲
▼
mal was zum Thema :-)

Hiermit alle Dateien suchen:
http://msdn.microsoft.com/de-de/library/system.io.directory.getfiles.aspx
Die Ergebnisse kommen in eine Liste.
Dann in einer Schleife für jedes Bild ein Image-Objekt erstellen
1
Image bildname = new Bitmap(dateiname);
und für EXIF ein PropertyItem anlegen:
1
PropertyItem[] eigenschaften = bildname.PropertyItems;
(http://msdn.microsoft.com/de-de/library/system.drawing.image.propertyitems.aspx)

In den Property-Items suchst du dann den Tag mit
1
.ID = 0x0132
 (DateTime-Tag) - dann erhältst du den String mit Datu und Zeit.

So hab ich es zumindest umgesetzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren