Forum: PC-Programmierung Buch über C++


von L. J. (luke1)


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
von Stefan Salewski (Gast)


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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Indem du einen Pfad vor den Dateinamen stellst vielleicht?

von Sven P. (Gast)


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.

von Karl H. (kbuchegg)


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?

von Klaus W. (mfgkw)


Lesenswert?

Je nach System MSDN oder man pages lesen?

von FlipFlop (Gast)


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

von L. J. (luke1)


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.

von Karl H. (kbuchegg)


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 :-)

von Klaus W. (mfgkw)


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...

von Simon K. (simon) Benutzerseite


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?

von L. J. (luke1)


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 :)

von L. J. (luke1)


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:
1
#include <iostream>
2
#include <fstream>
3
using namespace std;
4
5
int main(void)
6
{
7
    char c;
8
    ifstream Zieldatei;
9
    Zieldatei.open("C:/temp/test.txt",ios_base::in);
10
    if(!Zieldatei)
11
    {
12
       cerr<<"Zieldatei konnte nicht geöffnet werden!\n";
13
    }
14
    while(Zieldatei.get(c))
15
    {
16
       cout<<c;
17
    }
18
    cin.get();
19
}
Es kommt jedes mal der Error: Zieldatei konnte nicht geöffnet werden!
Ich weiß nicht mehr, was ich noch ändern soll.

von Simon K. (simon) Benutzerseite


Lesenswert?

Existiert die Datei denn überhaupt?

von L. J. (luke1)


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.

von Peter (Gast)


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

von Sven P. (Gast)


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.

von L. J. (luke1)


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 :)

von Klaus W. (mfgkw)


Lesenswert?

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

War doch notepad, oder?

von Sven P. (Gast)


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.

von Mark B. (markbrandis)


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 :-)

von dagger (Gast)


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
1
ifstream Zieldatei;
 nur für das Lesen funktioniert, für das Schreiben muss es
1
ofstream Zieldatei;
 sein. Das stand imho auch in dem anderen Thread.

Irgendwas wie folgendes suchst du (vermutlich):
1
#include <iomanip>
2
#include <iostream>
3
#include <fstream>
4
5
using namespace std;
6
7
int main ( int argc, char* argv[] ){
8
  ifstream srcFile;
9
  ofstream dstFile;
10
  char line[128];
11
12
  srcFile.open("Datei_1.txt", ios_base::in);
13
  dstFile.open("Datei_2.txt", ios_base::out);
14
  
15
  if(!srcFile) {
16
    cerr << "srcFile konnte nicht geöffnet werden\n";
17
  }
18
  if(!dstFile) {
19
    cerr << "dstFile konnte nicht geoeffnet werden\n";
20
  }
21
22
  while(srcFile.getline(line,sizeof(line))) {
23
    cout << "Line = " << line << endl;
24
    dstFile << line << endl;
25
  }
26
27
  cout << "Irgendeine Taste druecken!" << endl;
28
  cin.clear();
29
  //cin.ignore(256, '\n');
30
  cin.get();
31
32
  srcFile.close();
33
  dstFile.close();
34
35
  return 0;
36
}

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. ;-)

von dagger (Gast)


Lesenswert?


von Peter (Gast)


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.

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.