
130834
20.02.2017, aktualisiert um 20:08:37 Uhr
Datei-Managment (C++)
Hallo Leute,
Ich hab seit ~2 Sekunden angefangen etwas in C++ zu schreiben.
Ich dachte eigentlich immer diese Sprachen seien "Hochentwickelt",
aber es scheint als würde sich alles dagegen wehren das man das bekommt was man will.
Man muss Standard-Funktionen überschreiben,
ganze Bücher implementieren und nebenbei auch noch schwarze Magie wirken können.
Oder ich übersehe etwas ganz Fatal. Wahrscheinlich. Nahe-liegend.
Bevor ich hierher gekommen bin habe ich hunderte Dinge gegoogelt, aber bin nicht wirklich auf Ergebnisse gekommen.
Ich habe nur mal versucht eine Funktion wie
zu bekommen.
( Also verarbeiten aller Dateien in einem Ordner + seine Unterordner )
Dabei bin ich auf etwa 20 Lösungen mit zwischen 2 und 120 Zeilen Code gestoßen.
Gibt es auch so etwas wie "einfaches Dateimanagment" ?
Ich vermisse es jetzt schon.
Ich meine, was wäre sonst der Sinn einer KONSOLEN-Anwendung?
Wäre nett wenn mir jemand ein paar Referenzen oder Erklärungen dalassen könnte, zu dem Thema.
Wenn ich falsch liege bitte belehren, ich bin offen für alles.
schönen Abend,
lg clragon
Ich hab seit ~2 Sekunden angefangen etwas in C++ zu schreiben.
Ich dachte eigentlich immer diese Sprachen seien "Hochentwickelt",
aber es scheint als würde sich alles dagegen wehren das man das bekommt was man will.
Man muss Standard-Funktionen überschreiben,
ganze Bücher implementieren und nebenbei auch noch schwarze Magie wirken können.
Oder ich übersehe etwas ganz Fatal. Wahrscheinlich. Nahe-liegend.
Bevor ich hierher gekommen bin habe ich hunderte Dinge gegoogelt, aber bin nicht wirklich auf Ergebnisse gekommen.
Ich habe nur mal versucht eine Funktion wie
1
For /R Pfad SchleifenVariable in (File.File-ending) do (Dinge)
( Also verarbeiten aller Dateien in einem Ordner + seine Unterordner )
Dabei bin ich auf etwa 20 Lösungen mit zwischen 2 und 120 Zeilen Code gestoßen.
Gibt es auch so etwas wie "einfaches Dateimanagment" ?
Ich vermisse es jetzt schon.
Ich meine, was wäre sonst der Sinn einer KONSOLEN-Anwendung?
Wäre nett wenn mir jemand ein paar Referenzen oder Erklärungen dalassen könnte, zu dem Thema.
Wenn ich falsch liege bitte belehren, ich bin offen für alles.
schönen Abend,
lg clragon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 330030
Url: https://administrator.de/forum/datei-managment-c-330030.html
Ausgedruckt am: 06.04.2025 um 09:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
fang erst mal wie jeder mit "Hallo Welt" an. Und dan lerne mal ein paar Monate die ersten Grundlagen. Dann frag mal nach Hilfe.
2 sec und dann schon um Hilfe bitte und das bei C++ ist ne Frechheit.
Und überleg mal ob das überhaupt die richtige Sprache für dich ist.
Ich würd mich auf was mit .NET stürzen da ist im Framework schon viel fertig
fang erst mal wie jeder mit "Hallo Welt" an. Und dan lerne mal ein paar Monate die ersten Grundlagen. Dann frag mal nach Hilfe.
2 sec und dann schon um Hilfe bitte und das bei C++ ist ne Frechheit.
Und überleg mal ob das überhaupt die richtige Sprache für dich ist.
Ich würd mich auf was mit .NET stürzen da ist im Framework schon viel fertig
Mahlzeit,
ich fürchte, du hast die Eigenschaften einer Hochsprache noch nicht so recht verstanden.
Eine Hochsprache zeichnet sich nicht dadurch aus, dass der erforderliche Quellcode äußerst kompakt ist, um ein Ziel zu erreichen.
Vielmehr geht es bei der Hochsprache darum, dass du sehr viel mehr Möglichkeiten und Funktionalitäten hast, gegenüber einfachen "Sprachen" wie Batch oder gar Assembler.
Versuche Beispielsweise mal mit einer Batch Klassen und Objekte zu generieren..
Und nur, weil ein Programm sich einer augenscheinlich primitiven visualisierenden Schnittstelle (Konsolen-Fenster) bedient, heißt es ja nicht, dass das Programm selbst primitiv ist. Oder willst du etwa andeuten, dass z.B. die ganzen Linux-/ Unix-Systeme nicht in einer Hochsprache entwickelt wurden, nur weil zumeist keine GUIs zum Einsatz kommen!?
Sicher, der Weg ist manchmal aufwendiger gegenüber einer Batch, um das selbe Ziel zu erreichen. Dafür stünden dir aber auch wesentlich mehr Funktionen/ Möglichkeiten/ Werkzeuge zur Seite, welche du vermutlich zu Beginn nicht benötigst...
Gruß
em-pie
ich fürchte, du hast die Eigenschaften einer Hochsprache noch nicht so recht verstanden.
Eine Hochsprache zeichnet sich nicht dadurch aus, dass der erforderliche Quellcode äußerst kompakt ist, um ein Ziel zu erreichen.
Vielmehr geht es bei der Hochsprache darum, dass du sehr viel mehr Möglichkeiten und Funktionalitäten hast, gegenüber einfachen "Sprachen" wie Batch oder gar Assembler.
Versuche Beispielsweise mal mit einer Batch Klassen und Objekte zu generieren..
Und nur, weil ein Programm sich einer augenscheinlich primitiven visualisierenden Schnittstelle (Konsolen-Fenster) bedient, heißt es ja nicht, dass das Programm selbst primitiv ist. Oder willst du etwa andeuten, dass z.B. die ganzen Linux-/ Unix-Systeme nicht in einer Hochsprache entwickelt wurden, nur weil zumeist keine GUIs zum Einsatz kommen!?
Sicher, der Weg ist manchmal aufwendiger gegenüber einer Batch, um das selbe Ziel zu erreichen. Dafür stünden dir aber auch wesentlich mehr Funktionen/ Möglichkeiten/ Werkzeuge zur Seite, welche du vermutlich zu Beginn nicht benötigst...
Gruß
em-pie
Moin,
C++, ebenso wie C sind Hochsprachen. Jetzt darf man sich fragen, warum sind es Hochsprachen?
Naja, wenn du dir eine Hochsprache anschaust und feststellst, dass du damit probleme hast, weißt du, dass du auf noch niedereren Sprachen noch mehr Probleme damit haben willst.
Selbst wenn du C++ in dieser Form vielleicht als Umständlich ansiehst und teilweise Seitenweise funktionen implementieren müsstest, willst du dir vermutlich nicht vorstellen, was du dafür stattdessen auf ebene von assembler programmieren müsstest.
Um Wikipedia zu zitieren:
Mit anderen Worten: In C und C++ weißt du immerhin, dass schonmal eine datei existiert, während du das in assembler noch definieren müsstest.
Das hier C++ schon weiter ist als C wirst du beim manipulieren von Strings feststellen. Das macht und C++ schonmal wesentlich mehr spaß, weil es strings nicht nur als einfache arrays von Charactern ansieht.
Aber zu deinem Problem:
Du wirst dir bestimmt die Frage gestellt haben: "Ich kann doch nicht der erste sein, der sowas machen will, oder?" Mit Idee hinter der Frage liegst du ja, wie deine Recherche gezeigt hat, offensichtlich nicht falsch.
Statt hier alles so exakt vorzugeben, hat C++ ebenso wie C das ganze an die Entwickler übergeben und ihnen erlaubt libraries zu entwicklen, diese Libraries wiederum kann man dann entsprechend benutzen. Es gibt sogenannte Standard libraries, ebenso wie individuelle Libaries.
Hier musst du bedenken wie viele unterscheidliche OS es gibt und wie viele davon teilweise gar kein Dateisystem haben. (Ja, sowas gibt es)
Es ist also nicht unbedingt sinnvoll sowas immer mitzugeben und bläht die Sprache dadurch nur unnötig auf. Deshalb kann man sowas im Zweifel selbst entwicklen, bzw. eine Libary hierzu verwenden.
Für dein Problem gewiss sinnvoll: http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v3/doc/index.htm#D ...
Gruß
Chris
C++, ebenso wie C sind Hochsprachen. Jetzt darf man sich fragen, warum sind es Hochsprachen?
Naja, wenn du dir eine Hochsprache anschaust und feststellst, dass du damit probleme hast, weißt du, dass du auf noch niedereren Sprachen noch mehr Probleme damit haben willst.
Selbst wenn du C++ in dieser Form vielleicht als Umständlich ansiehst und teilweise Seitenweise funktionen implementieren müsstest, willst du dir vermutlich nicht vorstellen, was du dafür stattdessen auf ebene von assembler programmieren müsstest.
Um Wikipedia zu zitieren:
Eine höhere Programmiersprache ist eine Programmiersprache zur Abfassung eines Computerprogramms, die in Abstraktion und Komplexität von der Ebene der Maschinensprachen deutlich entfernt ist.
Mit anderen Worten: In C und C++ weißt du immerhin, dass schonmal eine datei existiert, während du das in assembler noch definieren müsstest.
Das hier C++ schon weiter ist als C wirst du beim manipulieren von Strings feststellen. Das macht und C++ schonmal wesentlich mehr spaß, weil es strings nicht nur als einfache arrays von Charactern ansieht.
Aber zu deinem Problem:
Du wirst dir bestimmt die Frage gestellt haben: "Ich kann doch nicht der erste sein, der sowas machen will, oder?" Mit Idee hinter der Frage liegst du ja, wie deine Recherche gezeigt hat, offensichtlich nicht falsch.
Statt hier alles so exakt vorzugeben, hat C++ ebenso wie C das ganze an die Entwickler übergeben und ihnen erlaubt libraries zu entwicklen, diese Libraries wiederum kann man dann entsprechend benutzen. Es gibt sogenannte Standard libraries, ebenso wie individuelle Libaries.
Hier musst du bedenken wie viele unterscheidliche OS es gibt und wie viele davon teilweise gar kein Dateisystem haben. (Ja, sowas gibt es)
Es ist also nicht unbedingt sinnvoll sowas immer mitzugeben und bläht die Sprache dadurch nur unnötig auf. Deshalb kann man sowas im Zweifel selbst entwicklen, bzw. eine Libary hierzu verwenden.
Für dein Problem gewiss sinnvoll: http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v3/doc/index.htm#D ...
Gruß
Chris
Zitat von @em-pie:
Eine Hochsprache zeichnet sich nicht dadurch aus, dass der erforderliche Quellcode äußerst kompakt ist, um ein Ziel zu erreichen.
Vielmehr geht es bei der Hochsprache darum, dass du sehr viel mehr Möglichkeiten und Funktionalitäten hast, gegenüber einfachen "Sprachen" wie Batch oder gar Assembler.
Eine Hochsprache zeichnet sich nicht dadurch aus, dass der erforderliche Quellcode äußerst kompakt ist, um ein Ziel zu erreichen.
Vielmehr geht es bei der Hochsprache darum, dass du sehr viel mehr Möglichkeiten und Funktionalitäten hast, gegenüber einfachen "Sprachen" wie Batch oder gar Assembler.
Kurz: Nein. Das ist ganz sicher nicht der Sinn einer "Hochsprache" dir mehr Möglichkeiten als Assembler zu geben. 2 einfache Gründe:
a) Scheibe mal in C/C++/Java/... ein Programm mit 2 KByte... Viel mehr (wenn überhaupt) als Hallo Welt ist nicht drin. Bei ASM: Viel Spass, da brauchst schon einige Seiten Source-Code für
b) Was glaubst du was dein Compiler aus deiner Hochsprache macht (Bei Java noch mit Umweg über die JVM)? Versuche doch mal deiner CPU ein "cout", "println" oder "System.out.println" unterzujubeln. Die wird dich mit Speichermodulen bewerfen... Deine Hochsprache macht dein Programm eigentlich nur langsamer - da dein Compiler versuchen wird den Code auf maximale Kompatiblität zu drücken (abhängig von deinen Einstellungen). In ASM baue ich das Programm für genau eine Architektur, d.h. da kann ich alle Tricks Anwenden...
Und auch der Vergleich zur Batch ist unsinn. Sorry, aber wer z.B. für eine Sache wie "Lösche Täglich das Temp-Verzeichnis" (oder auch andere Skripte) gleich zur Hochsprache greift hat einiges nicht verstanden. Generell kann man 4 - 5 Typen von Sprachen unterteilen:
a) Assembler
b) Skript-Sprachen (da würde ich auch Batches mit zunehmen)
c) Beschreibungssprachen (html,...)
d) Hochsprachen
e) KI-Sprachen
Jede Sprache hat dabei ihre Berechtigung - du wirst z.B. auch nicht auf die Idee kommen eine CPU in Java/C++ zu programmieren. Hier kommst du dann eher auf VHDL. Du wirst aber ganz sicher auch keine GUI mit ASM oder mit einer Batch bauen wollen... EINES haben jedoch die meisten Sprachen gemeinsam: Mit wenigen Sekungen oder Tagen ist es eher nie getan....
Bin ich mit dir D'Accord...
Ist anders gemeint, als es formuliert ist. Mal abgesehen, davon, dass ich Batch falsch einsortiert habe
Denn hier werden ja auch "nur" Programmfunktionalitätem in Routinen abgearbeitet.
Der von dir zitierte Absatz meines Posts bezieht sich auch weniger auf den Umfang des erforderlichen Quellcodes, mehr z.B. auf die zur Verfügung stehende Syntax. Dadurch kann wiederum mit weniger Zeilen gleichzeitig mehr Funktionalität erreicht werden.
Und die Möglichkeiten und Funktionalitäten bezogen sich auch beispielsweise auf Dinge wie z.B. das fast problemlose Portieren auf andere Plattformen (sofern dort entsprechende Compiler vorhanden sind) oder aber das Einbauen von (Drittanbieter-)Routinen (Libraries, etc.), ohne dass ich mir einen Kopf machen muss, wie der zuständige Prozessor unten drunter das nun umsetzt.
Und ob man eine Hochsprache für ähnlich einfache Aufgaben, wie von dir plakativ skizziert, einsetzen muss, halte ich (ebenfalls) für fragwürdig.
@130834
maretz' Satz
Ist anders gemeint, als es formuliert ist. Mal abgesehen, davon, dass ich Batch falsch einsortiert habe
Der von dir zitierte Absatz meines Posts bezieht sich auch weniger auf den Umfang des erforderlichen Quellcodes, mehr z.B. auf die zur Verfügung stehende Syntax. Dadurch kann wiederum mit weniger Zeilen gleichzeitig mehr Funktionalität erreicht werden.
Und die Möglichkeiten und Funktionalitäten bezogen sich auch beispielsweise auf Dinge wie z.B. das fast problemlose Portieren auf andere Plattformen (sofern dort entsprechende Compiler vorhanden sind) oder aber das Einbauen von (Drittanbieter-)Routinen (Libraries, etc.), ohne dass ich mir einen Kopf machen muss, wie der zuständige Prozessor unten drunter das nun umsetzt.
Und ob man eine Hochsprache für ähnlich einfache Aufgaben, wie von dir plakativ skizziert, einsetzen muss, halte ich (ebenfalls) für fragwürdig.
@130834
maretz' Satz
Und auch der Vergleich zur Batch ist unsinn. Sorry, aber wer z.B. für eine Sache wie "Lösche Täglich das Temp-Verzeichnis" (oder auch andere Skripte) gleich zur Hochsprache greift hat einiges nicht verstanden.
bezog sich glaube ich auf mich!?
Ich habe genauso angefangen und bin genauso hingeflogen.
Es ist sehr viel schwieriger, weil du standardmäßig nichts einfach sagen kannst.
Du musst dem Programm mühsam erklären, was es vor sich hat und was es damit anstellen soll.
Weiterhin kann ich dir sagen, bei C++ wirst du von der Allgemeinen Community sehr wenig gegenliebe erhalten.
Typische antworten sind etwa so: "Schnapp dir ein Buch und lern die 1000 Seiten, dann weißt du selbst wie man eine Textdatei auslesen kann"
Unterstützung bei Fragen, wie bei Skriptsprachen üblich, habe ich jedenfalls noch keine bekommen.
C# ist von der Programmierung her recht human.
Es ist sehr viel schwieriger, weil du standardmäßig nichts einfach sagen kannst.
Du musst dem Programm mühsam erklären, was es vor sich hat und was es damit anstellen soll.
Weiterhin kann ich dir sagen, bei C++ wirst du von der Allgemeinen Community sehr wenig gegenliebe erhalten.
Typische antworten sind etwa so: "Schnapp dir ein Buch und lern die 1000 Seiten, dann weißt du selbst wie man eine Textdatei auslesen kann"
Unterstützung bei Fragen, wie bei Skriptsprachen üblich, habe ich jedenfalls noch keine bekommen.
C# ist von der Programmierung her recht human.
Hallo clragon.
Es ist schon viel gesagt worden, was ich hier nicht wiederholen will. Also gehe ich mal auf deine Frage ein.
Grüße
rubberman
Es ist schon viel gesagt worden, was ich hier nicht wiederholen will. Also gehe ich mal auf deine Frage ein.
Gibt es auch so etwas wie "einfaches Dateimanagment" ?
Ein Minimum. Das beschränkt sich im Grunde auf Lesen, Erzeugen/Schreiben und Anhängen von Inhalt an eine bestehende Datei, sowie Löschen einer Datei. Also absolute Grundfunktionen. Warum so wenig? Weil es das ist, was man plattformunabhängig benötigt, um Daten die ein Programm erzeugt, zu sichern. Dagegen ist das Arbeiten mit dem Dateisystem völlig plattformabhängig. Denk mal an ein Dateisystem wie NTFS, das mehr oder weniger nur für Windows existiert. Das heißt, um damit zu arbeiten, hast du 2 Möglichkeiten. 1.) Du nutzt die Schnittstellen des jeweiligen Betriebssystems (Windows API für Windows, POSIX Funktionen für *nixoide Betriebssysteme), oder 2.) du nutzt fertige Libraries (wie das erwähnte boost), die die Funktionen der entsprechenden Schnittstellen wrappen, sodass du als Nutzer unabhängig von der Plattform Klassen und Funktionen zur Verfügung hast, die sich überall gleich verhalten.Grüße
rubberman
Moin,
ok, dann bleibe ich mal bei deinen "bewege den Ordner nach da": Der Grund warum das als Batch einfach ist: Es hat jemand für dich die "Drecksarbeit" bereits erledigt. Dein Copy-/Move-Command wurde ja auch mal von irgendwem implementiert.
Wenn du jetzt eine Hochsprache nimmst wäre das einfach -> du rufst nen System.exec auf und führst die Kommandos da aus. Ist eigentlich in jeder Sprache schnell erledigt - aber auch gleichzeitig der dümmste Weg den du wählen kannst (dann nimm gleich die Batch). Willst du das jetzt selbst programmieren dann geht das halt nicht so einfach - dein Programm muss ja jetzt etwas mehr tun.
a) Prüfen ob der Ordner überhaupt existiert
b) Prüfen ob die Dateien darin überhaupt existieren
c) Prüfen ob du die Rechte dafür hast
d) Mit dem OS abklären das du Speicherplatz im RAM reserviert bekommst
e) Prüfen ob das Ziel überhaupt erreichbar ist
f) Jeden Block deiner Datei von der Quelle in den RAM legen, den Quellblock löschen, den Block vom Ram auf den neuen Platz legen und mit dem nächsten Block fortfahren (bzw. je nachdem was du tust nur nen Zeiger im Header ändern)
Das sind nur die groben Schritte, da hängen noch einige mehr drin. Dazu kommt dann noch eine Fehlerbehandlung - wie soll dein Programm reagieren wenn ein Fehler auftritt? Wäre ja blöd wenn dein Programm komplett auf die Bretter geht weil eine Datei nicht kopiert werden kann und dabei dann x andere Dateien mit zerlegt.... Derjenige der dir dein Copy-Befehl / Move-Befehl in deinem Betriebssystem gebaut hat war so nett all das (und mehr) für dich zu tun... Willst du das jetzt zu Fuss (ohne zusätzliche Lib.) erledigen musst du dich halt selbst kümmern und dann wird es komplex. Dabei ist es auch völlig normal das du zu einem (relativ trivialen) Problem was häufig gebraucht wird locker 30-???? Lösungsansätze findest. Denn jeder hat da "seine" Vorlieben und ggf. auch andere Anforderungen (z.B. die Datei nicht auf ne lokale Platte sondern als Ziel direkt per ssh kopieren,...). Und je mehr ich über meine Daten weiss umso schneller kann ich arbeiten weil ich dann gewisse Prüfungen weglassen kann. Es gibt also nicht "DEN" Weg... Und das wird dich während der gesamten Programmierzeit begleiten, du wirst immer 10 Lösungen für 1 Problem haben.
ok, dann bleibe ich mal bei deinen "bewege den Ordner nach da": Der Grund warum das als Batch einfach ist: Es hat jemand für dich die "Drecksarbeit" bereits erledigt. Dein Copy-/Move-Command wurde ja auch mal von irgendwem implementiert.
Wenn du jetzt eine Hochsprache nimmst wäre das einfach -> du rufst nen System.exec auf und führst die Kommandos da aus. Ist eigentlich in jeder Sprache schnell erledigt - aber auch gleichzeitig der dümmste Weg den du wählen kannst (dann nimm gleich die Batch). Willst du das jetzt selbst programmieren dann geht das halt nicht so einfach - dein Programm muss ja jetzt etwas mehr tun.
a) Prüfen ob der Ordner überhaupt existiert
b) Prüfen ob die Dateien darin überhaupt existieren
c) Prüfen ob du die Rechte dafür hast
d) Mit dem OS abklären das du Speicherplatz im RAM reserviert bekommst
e) Prüfen ob das Ziel überhaupt erreichbar ist
f) Jeden Block deiner Datei von der Quelle in den RAM legen, den Quellblock löschen, den Block vom Ram auf den neuen Platz legen und mit dem nächsten Block fortfahren (bzw. je nachdem was du tust nur nen Zeiger im Header ändern)
Das sind nur die groben Schritte, da hängen noch einige mehr drin. Dazu kommt dann noch eine Fehlerbehandlung - wie soll dein Programm reagieren wenn ein Fehler auftritt? Wäre ja blöd wenn dein Programm komplett auf die Bretter geht weil eine Datei nicht kopiert werden kann und dabei dann x andere Dateien mit zerlegt.... Derjenige der dir dein Copy-Befehl / Move-Befehl in deinem Betriebssystem gebaut hat war so nett all das (und mehr) für dich zu tun... Willst du das jetzt zu Fuss (ohne zusätzliche Lib.) erledigen musst du dich halt selbst kümmern und dann wird es komplex. Dabei ist es auch völlig normal das du zu einem (relativ trivialen) Problem was häufig gebraucht wird locker 30-???? Lösungsansätze findest. Denn jeder hat da "seine" Vorlieben und ggf. auch andere Anforderungen (z.B. die Datei nicht auf ne lokale Platte sondern als Ziel direkt per ssh kopieren,...). Und je mehr ich über meine Daten weiss umso schneller kann ich arbeiten weil ich dann gewisse Prüfungen weglassen kann. Es gibt also nicht "DEN" Weg... Und das wird dich während der gesamten Programmierzeit begleiten, du wirst immer 10 Lösungen für 1 Problem haben.