Forum: PC-Programmierung Fotosortierprogramm in C#


von Michael (Gast)


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

von Wolfgang (Gast)


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.

von Mr. Tom (Gast)


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/

von Michael (Gast)


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

von Uhu U. (uhu)


Lesenswert?


von PittyJ (Gast)


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.

von Mike M. (mikeii)


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.

von Gerhard (Gast)


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.

von Peter II (Gast)


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?

von Gerhard (Gast)


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.

von Techniker (Gast)


Lesenswert?

Es gibt da schon ein Programm nennt sich Exifsorter ich finde es super.
Ich glaube das ist was Du suchst:

http://www.amok.am/index.php?page=progr&id=9

von Peter II (Gast)


Lesenswert?

Gerhard schrieb:
> Die Windows-Kommandozeile kannst du nicht mit einer vernünftigen Shell
> vergleichen.

unter Windows gibt es Windows Scripting Host, nur weil es eventuell 
anders ist, kann es vermutlich genauso viel wie eine Linux-Shell.

von Kail (Gast)


Lesenswert?

Peter II schrieb:
> unter Windows gibt es Windows Scripting Host, nur weil es eventuell
> anders ist, kann es vermutlich genauso viel wie eine Linux-Shell.

Und ist sogar noch angenehmer zu bedienen, da es objektorientiert 
aufgebaut ist...

von F. F. (foldi)


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.

von Robert L. (lrlr)


Lesenswert?

wasn hier los..

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

http://www.sno.phy.queensu.ca/~phil/exiftool/

da gibt's auch ein Windows Executable


http://www.sno.phy.queensu.ca/~phil/exiftool/#filename

von Michael (Gast)


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.

von Robert L. (lrlr)


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

von ich (Gast)


Lesenswert?

Robert L. schrieb:
> (gibt zwar C# auch für linux, aber egal...)

Was nützt ihm denn ein C# für Linux? Denn:

Michael schrieb:
> ... aber das Programm sollte ja
> die Fotos auf der Festplatte meines Windows Rechners sortieren.

von Robert L. (lrlr)


Lesenswert?

dass es für den TO nicht Sinnvoll ist, hab ich ja selber weiter oben 
geschrieben,
die Antwort bezog sich nur auf diesen Satz:

>Außerdem
>ist für mich C# wesentlich einfacher.


der impliziert, dass der TO glaubt, wer könne auf Linux nicht mit C# 
arbeiten..

von Michael K. (aemkai)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.