130834
Goto Top

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
For /R Pfad SchleifenVariable in (File.File-ending) do (Dinge) 
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

Content-Key: 330030

Url: https://administrator.de/contentid/330030

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: wiesi200
wiesi200 20.02.2017 um 20:43:29 Uhr
Goto Top
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
Mitglied: em-pie
em-pie 20.02.2017 um 20:48:17 Uhr
Goto Top
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
Mitglied: Sheogorath
Lösung Sheogorath 20.02.2017 um 20:52:56 Uhr
Goto Top
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:
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
Mitglied: maretz
maretz 20.02.2017 um 21:07:29 Uhr
Goto Top
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.

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....
Mitglied: 130834
130834 20.02.2017 aktualisiert um 21:51:24 Uhr
Goto Top
Also erst mal;
Vielen Dank für all die schönen Antworten. Ich schätze das sehr.


Kurz zum einzelnen;

@wiesi200

2 sec und dann schon um Hilfe bitte und das bei C++ ist ne Frechheit.

In der tat waren es natürlich NICHT 2 Sekunden. Ich bin davon ausgegangen das man so offensichtlichen Sarkasmus erkennen würde.

Ich lerne seit einiger Zeit die Grundlegenden C++ Dinge über zb Sololearn, und lese ein Buch welches C# genauer erläutert.
Was ich eigentlich damit meinte ist das ich momentan sehr wenig darüber Weiß.

Und dann lerne mal ein paar Monate die ersten Grundlagen.

Für jemanden der schon seit IMMER Batch schreibt und noch nie eine andere Sprache gelernt hat, ist eine FOR /R Schleife eine sehr grundlegende Sache, vielen Dank.

Und nebenbei.. Man kann seine Antworten auch im Grundgesetz aller Höflichkeit verfassen.
Ich meine ich habe nicht umsonst diese Linie hier hinzugefügt;

Wenn ich falsch liege bitte belehren, ich bin offen für alles.


@em-pie

ich fürchte, du hast die Eigenschaften einer Hochsprache noch nicht so recht verstanden.

Nein nicht wirklich.
Aber man kann ja Nachfragen richtig?
Danke für die Erklärung.

@Sheogorath

Vielen Dank, das war sehr lehrreich. Ich werde mich in Zukunft dann darauf einstellen, auch seiten-weise Funktionen zu schreiben, oder nach Bibliotheken zu suchen. Immerhin, habe ich einige mehr Auswahlmöglichkeiten an Anwendungen, richtig?


@maretz

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.

Nein, nein die Dinge habe ich alle schon durch.
ich bin dann nur an den Punkt gekommen bei dem man mit GUI und vor allem sehr ausgedehnte / spezifische / komplexe Funktionen braucht und dort hat Batch ein gigantisches Loch.

Ich dachte nur, das solche Grundlegenden Dinge wie "bewege mir diese Datei nach DA" oder "Finde diesen Ordner" schon vorhanden wären.
Irrtum, aber ich habe kein allzu großes Problem damit.
Irgendwann muss ich die Sprache wechseln.

Du wirst aber ganz sicher auch keine GUI mit ASM oder mit einer Batch bauen wollen...

ich habe bereits eine "GUI" in Batch gebaut. Einer der Gründe warum ich jetzt die Sprache wechseln muss.


EINES haben jedoch die meisten Sprachen gemeinsam: Mit wenigen Sekunden oder Tagen ist es eher nie getan....

Ja, das hab ich soweit auch verstanden.

@ All

Da wär noch eine Frage;

Aber was war den nun der Grundgedanke einer Hochsprache? face-smile

Ich muss nur die Sprache wechseln weil Batch langsam, veraltet, eingeschränkt und gar keine Sprache ist.

schönen Abend,

lg clragon
Mitglied: em-pie
em-pie 20.02.2017 um 21:59:25 Uhr
Goto Top
Bin ich mit dir D'Accord...
Ist anders gemeint, als es formuliert ist. Mal abgesehen, davon, dass ich Batch falsch einsortiert habeface-confused 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
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!?
Mitglied: Marabunta
Lösung Marabunta 20.02.2017 um 23:58:45 Uhr
Goto Top
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.
Mitglied: rubberman
Lösung rubberman 21.02.2017 um 00:15:49 Uhr
Goto Top
Hallo clragon.

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
Mitglied: maretz
Lösung maretz 21.02.2017 um 05:04:35 Uhr
Goto Top
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.