mikrocontroller.net

Forum: PC-Programmierung Buch über C++


Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Ich bin auf der Suche nach einem Buch über C++ worin mehr beschrieben 
steht wie ich auf Daten auf meinem PC zugreifen kann. Also auch 
Festplatte, externe Festplatte und nicht nur auf Dateien in dem Ordner 
auf dem PC wo auch die .exe liegt. Ich will quasi überall drauf 
zugreifen können. Was ich nicht suche sind solche Bücher, die die 
Grundlagen über C/C++ erklären. Zum einen habe ich so ein Buch, zum 
anderen gibts dazu genügend Tutorials im Internet. Ich hoffe ihr wisst 
was ich meine. Danke für die Hilfen! :)

: Verschoben durch Moderator
Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich hoffe ihr wisst

Du suchst ein Buch für Dein Betriebssystem das für die Beispiele C++ 
verwendet -- da solltest Du wenigstens sagen welches OS Du verwenden 
willst.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du einen Pfad vor den Dateinamen stellst vielleicht?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat nichts mit C++ zu tun. C++ kennt i/ostreams, fertig.

Damit kann man auf das 'Dateisystem' zugreifen; für Unix heißt das 
entsprechend: Auf CDs, Geräte, Festplatten, FTP-Verzeichnisse, Windows 
Freigaben, NFS-Laufwerke und so weiter, weil alle diese Dinge ins 
Dateisystem eingehangen werden können.

KDE stellt eine weitere quasitransparente Schicht zur Verfügung 
(kio-Plugins) und treibt das Spiel noch weiter auf HTTP, 
ICQ(Oscar)-Übertragungen, Digitalkameras etc.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L. J. schrieb:

> Ich bin auf der Suche nach einem Buch über C++ worin mehr beschrieben
> steht wie ich auf Daten auf meinem PC zugreifen kann. Also auch
> Festplatte, externe Festplatte und nicht nur auf Dateien in dem Ordner
> auf dem PC wo auch die .exe liegt.

Indem man bei der Angabe des Dateinamens auch immer den Pfad mit dazu 
gibt, kann man auf alles zugreifen, was sich im Dateibaum des 
Betriebssystems abbilden lässt. Wenn dein OS es schafft einen entfernten 
FTP-Server als Directory-Node in den Dateibaum einzubinden, kannst du 
natürlich dann auch mit der Angabe des Directory-Pfades auf diesen 
entfernten FTP-Server zugreifen und das darunterliegende OS kümmert sich 
um den Transport der Daten von/zum Server.

Wo liegt also das Problem?
Dass du nicht weißt, wie man auf deinem OS eine Pfadangabe formuliert?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach System MSDN oder man pages lesen?

Autor: FlipFlop (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man braucht kein extra Buch dafür, suche doch mal nach Pfadangaben, 
diese sind entweder relativ oder absolut.
http://lmgtfy.com/?q=pfadangaben+relativ+absolut

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na wenn es nur das ist. Die Sache war die. Ich hatte es schonmal 
versucht. Ich hatte eine datei einfach auf der Festplatte gespeichert 
und ich konnte sie einfach nicht finden, trotz Pfadangabe. Aber 
vielleicht habe ich da auch was falsch gemacht. Ich dachte man bräuchte 
dafür bestimmte Libraries oder ähnliches.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
L. J. schrieb:
> Na wenn es nur das ist. Die Sache war die. Ich hatte es schonmal
> versucht. Ich hatte eine datei einfach auf der Festplatte gespeichert
> und ich konnte sie einfach nicht finden, trotz Pfadangabe. Aber
> vielleicht habe ich da auch was falsch gemacht. Ich dachte man bräuchte
> dafür bestimmte Libraries oder ähnliches.

Windows?

Ich wette du hast vergessen, dass ein \ in einem String als \\ 
geschrieben werden muss.

Die Datei test.txt im Verzeichnis temp, welches auf der Platte C direkt 
unter dem Wurzelverzeichnis liegt, hat unter Windows den vollständigen 
Namen in Form eines C-Strings

   "C:\\temp\\test.txt"

(Dies deshalb, weil \ in C und auch in C++ eine Sonderrolle hat.
\n  bezeichnet den Line Feed Character
\t  bezeichnet den Tabulator Character
\b  bezeichnet den Backspace Character
\\  schliesslich bezeichnet den \ Character )

Kann natürlich auch sein, dass die Datei gar nicht geschrieben wurde :-)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@L.J.: nee.

Aber erstens gibt man das nicht so an: "C:\temp\a.txt", sondern
"C:\\temp\\a.txt" oder "C:/temp/a.txt".

Zweitens bekommt auf vernünftige Fragen auch leichter vernünftige
Antworten, ohne erst 20 Leute ins Leere laufen zu lassen.
So in der Art: Das habe ich versucht... und es klappt nicht weil...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> @L.J.: nee.
>
> Aber erstens gibt man das nicht so an: "C:\temp\a.txt", sondern
> "C:\\temp\\a.txt" oder "C:/temp/a.txt".

So ist es. Weil Der Backslash ein Escape Zeichen ist. Wenn man aber 
tatsächlichen einen Backslash als Zeichen schreiben will, muss man die 
Escape Sequenz \\ (zwei Backslashes hintereinander verwenden). Das 
kannst du auch in deinem C Buch nachschauen.

Und du bist dir auch ganz sicher, dass in deinem C Buch kein einziges 
Beispiel mit absoluter Pfadangabe drin ist?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja tut mir Leid. Ich bin heute eh was im Stress. Deswegen auch nochmal 
ein Sorry dafür das ich hier bei Mikrocontroller und Elektronik 
reingeschrieben habe und nicht in PC-Programmierung. Ich bin heute etwas 
durch den Wind. Aber danke für die Hilfen ich werde es nachher mal 
versuchen, denn ich denke ich habe den Fehler schon gefunden :)

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun ja, leider klappt es doch nicht so richtig. Ich habe jetzt eine 
Datei mit dem Namen test.txt erstellt. Sie liegt auf der Festplatte in 
dem Ordner temp. Also ist der Pfad ja C:\temp\test.txt. Ich habe es mit 
diesem Code versucht:
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
    char c;
    ifstream Zieldatei;
    Zieldatei.open("C:/temp/test.txt",ios_base::in);
    if(!Zieldatei)
    {
       cerr<<"Zieldatei konnte nicht geöffnet werden!\n";
    }
    while(Zieldatei.get(c))
    {
       cout<<c;
    }
    cin.get();
}
Es kommt jedes mal der Error: Zieldatei konnte nicht geöffnet werden!
Ich weiß nicht mehr, was ich noch ändern soll.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Existiert die Datei denn überhaupt?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja tut sie. Ich seh sie ja wenn ich auf die Festplatte gehe und den 
Ordner temp öffne^^. Aber irgendwo muss es ja haken.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es sein das die Datei bei dir test.txt.txt heist? Windows Anzeige 
Dateierweiterung lässt grüßen.

mach mal auf der Komandozeile ein

dir c:\temp

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du diesen 'Dateiendungen-ausblenden'-Blödsinn eingeschaltet? Dann 
würde nämlich die Datei 'test.txt.txt' heißen..

Ansonsten öffne die Datei mit fopen() und lass dir mit strerror() ne 
anständige Fehlermeldung ausgeben.

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volltreffer Peter. Die Datei war eine txt.txt Datei. Ich Blödhammel hab 
wohl wieder nicht aufgepasst. Entschuldigt bitte für so einen Mist. Aber 
danke für eure Hilfe :)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das kommt davon, wenn man die Textdatei mit notepad schreibt und
nicht mit dem EMACS....  :-)

War doch notepad, oder?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es würde auch schon genügen, wenn Microsoft endlich diese hirnverbrannte 
Funktion standardmäßig abstellen würde.
Ich kann mich noch dran erinnern, da hat Outlook standardmäßig 
ausführbare (exe, com) EMail-Anhänge automatisch gestartet.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Ich kann mich noch dran erinnern, da hat Outlook standardmäßig
> ausführbare (exe, com) EMail-Anhänge automatisch gestartet.

Angst! :-(

Oder nee, doch nicht. Hab Outlook ja nie benutzt :-)

Autor: dagger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@L. J. (luke1)
Du hast doch schon ein paar Hinweise in dem ursprünglichen Thread 
bekommen. Das erste was mir da oben uffällt, ist das
ifstream Zieldatei;
 nur für das Lesen funktioniert, für das Schreiben muss es
ofstream Zieldatei;
 sein. Das stand imho auch in dem anderen Thread.

Irgendwas wie folgendes suchst du (vermutlich):
#include <iomanip>
#include <iostream>
#include <fstream>

using namespace std;

int main ( int argc, char* argv[] ){
  ifstream srcFile;
  ofstream dstFile;
  char line[128];

  srcFile.open("Datei_1.txt", ios_base::in);
  dstFile.open("Datei_2.txt", ios_base::out);
  
  if(!srcFile) {
    cerr << "srcFile konnte nicht geöffnet werden\n";
  }
  if(!dstFile) {
    cerr << "dstFile konnte nicht geoeffnet werden\n";
  }

  while(srcFile.getline(line,sizeof(line))) {
    cout << "Line = " << line << endl;
    dstFile << line << endl;
  }

  cout << "Irgendeine Taste druecken!" << endl;
  cin.clear();
  //cin.ignore(256, '\n');
  cin.get();

  srcFile.close();
  dstFile.close();

  return 0;
}

Sven P. schrieb:
> Ich kann mich noch dran erinnern, da hat Outlook standardmäßig
> ausführbare (exe, com) EMail-Anhänge automatisch gestartet.
Und bei aktuellen Versionen kam ein Kommilitone nicht mehr an 
'gefährlichen' Dateien ran. Seinen Aussagen nach, konnte er sie weder 
speichern, kopieren oder sonst irgendwas. ;-)

Autor: dagger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> > Ich kann mich noch dran erinnern, da hat Outlook standardmäßig
> > ausführbare (exe, com) EMail-Anhänge automatisch gestartet.
> Und bei aktuellen Versionen kam ein Kommilitone nicht mehr an
> 'gefährlichen' Dateien ran. Seinen Aussagen nach, konnte er sie weder
> speichern, kopieren oder sonst irgendwas. ;-)
ihr solltet euch wirklich mal den mit Programmen beschäftigen über die 
ihr lästert.
Ja bei Outlook2000 konnte man die Anhänge direkt starten, aber geht das 
nicht bei jedem email Programm?. Nachdem sich die genug Leute alles 
gestartet habe was bei ihnen angekommen ist mussste etwas unternommen 
werden. Mit einen ServicePack wurden dann die Anhänge in Gruppen 
eingesteilt( Level1 und Level2 ). Bei Level1 wurde komplett versteckt, 
Level2 durfte man nur speichern. Und es hat geholfen der Leie hat 
erstmal keinen Virus mehr direkt gestartet - er öffnet jetzt die Zip 
datei und startet den Virus dort raus.
Aber den Verhalten von Outlook war jederzeit konfigurierbar (in der 
Registry) für Faule gab es auch kostenlose Tool die das übernommen 
haben. Ich fand die Lösung zwar auch nicht perfekt aber sie haben halt 
etwas unternommen.
In Kombination mit Exchange konnte die diese Richtline auch Zentral 
verwalten.
Ich bin mit Outlook sehr zufrienden, keine Ahnung was die Leute immer 
daran zu nörgeln haben. Ich darf jetzt auch Arbeit mit Notes arbeiten - 
da sieht man estmal was wirklich schlecht ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.