You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, November 5th 2010, 12:30pm

Datei lesen/schreiben

Hallo ich schon wieder ;)

also hab zwar heute schon einen Beitrag geschrieben aber bin grad echt am verzweifeln im Internet finde ich auch nichts hilfreiches:(

Also ich möchte mit c eine Datei öffnen und diese beschreiben und auslesen habe das nun folgender maßen gemacht :

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
 
 
 
int main (void)
{
 
 
char string='hallo welt';
char string2;
 
 
/*Zeiger FILE enthält informationen zur Datei abwicklung und wie stdio.h definiert*/
	FILE * Mem;
 
  /*foben weißt einen Dateistrom zu */
	Mem=fopen("memo.txt","w+r");
 
 
  /*r-nur lesen
	w-nur schreiben
	r+, w+ zum schreiben und lesen
	a- schreiben aber anhängen an die Datei
	a+ schreiben und lesen an die Datei wird angehängt
   */
 
 /*überprüfen von fopen */
  if(Mem==NULL)
  {
  	puts("Fehler beim öffnen von memo.txt");
  	exit(EXIT_FAILURE);
 
  }
  else
	{
 
  	puts("memo.txt erfolgreich geöffnet");
 
	}
 
   /*Schreiben */
 
	fwrite(string,sizeof(string),20,Mem);
 
	/*Lesen*/
 
	fread(&string2, sizeof(char),20,Mem);
  /*Datei schließen*/
   fclose(Mem);
 
 
 
 
   return 0;
 
 
}


so das öffnen scheint zu funzen da ich die entsprechende meldung bekomme nur das schreiben und lesen nicht so da kommt der fehler "segmentation failt" übrigens das Programm sollte einen Text über einen Dialog einlesen ich habe jetzt nur mal Testweiße das so gemacht so nun weiß ich ja es gibt fscanf() fprintf() fput() fget() (glaub die hießen so) fwrite() fread() usw welche von diesen funktionen brauch ich denn nun und wie soll ich diese den Benutzen ???????????? weiß echt nicht mehr weiter die ganzen Beispiele im internet sind nicht sonderlich hilfreich da meist der anwendungsfall anders ist oder die beschreibung unnötig kompliziert ist !

Mit freundlichen grüßen

2

Friday, November 5th 2010, 1:28pm

Soweit ich das C-Anfänger beurteilen kann, sind folgende Fehler vorhanden:
Zeile 10: Ein String wird als eine Art Char-Array erzeugt. Jedoch wird bei dir ein Char (normalerweise 1 Zeichen) erzeugt, welches aber 10 Zeichen hat. Darauf dürfte dich dein Compiler aber aufmerksam gemacht haben (zumindest hat bei mir der gcc gemeckert).
Zeile44: Der Parameter der Blockzahl ist falsch. Oder wie kommst du auf 20? Du hast einen Block mit der Größe sizeof(string1). Somit solltest du als Blockzahl 1 statt 20 übergeben. Soweit ich das Sehe kommt die Blockzahl erst bei Arrays, etc. zu tragen.

Hier mal der verbesserte Quellcode:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
 
 
 
int main (void)
{
 
 
char string[] = {"hallo welt"};
char string2;
 
 
/*Zeiger FILE enthält informationen zur Datei abwicklung und wie stdio.h definiert*/
    FILE * Mem;
 
  /*foben weißt einen Dateistrom zu */
    Mem=fopen("memo.txt","w+r");
 
 
  /*r-nur lesen
    w-nur schreiben
    r+, w+ zum schreiben und lesen
    a- schreiben aber anhängen an die Datei
    a+ schreiben und lesen an die Datei wird angehängt
   */
 
 /*überprüfen von fopen */
  if(Mem==NULL)
  {
      puts("Fehler beim öffnen von memo.txt");
      exit(EXIT_FAILURE);
 
  }
  else
    {
 
      puts("memo.txt erfolgreich geöffnet");
 
    }
 
   /*Schreiben */
 
    fwrite(string,sizeof(string),1,Mem);
 
    /*Lesen*/
 
    fread(&string2, sizeof(char),1,Mem);
  /*Datei schließen*/
   fclose(Mem);
 
 
 
 
   return 0;
 
 
}

3

Friday, November 5th 2010, 1:52pm

Danke für deine Antwort Deadman !

Ja du hast recht das sind echt Fehler nun kommt auch nicht mehr Segmentation failt ....... nein der Compiler hat bei mir nicht gemeckert

leider funzt es trotzdem nicht nun bekomm ich zwar keine Fehler meldung mehr es wird aber immernoch nichts ausgegeben es wird mir nur gesagt "memo.txt wurde erfolgreich geöffnet" das ist alles! keine Ausgabe..... :( also kann jetzt auch nicht sagen ob er überhaupt was in diese Datei schreibt oder nicht trotzdem Danke

Bin für weitere Vorschläge offen ;)

4

Friday, November 5th 2010, 2:09pm

Bin zwar selber nur anfänger aber
"Mem=fopen("memo.txt","w+r");" gändert in "Mem=fopen("memo.txt","w+");"

Öffnet und schreibt die daten in die datei.

Wie man die Datei ausliest schreibe ich gleich mal weil so geht das nicht soweit ich weiß

EDIT:

Soo bei mir hat das nur auf diese weise funktioniert ansonsten gings auch nicht
Ich hoffe das hilft dir.

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
 
int schreiben() {
	FILE *f;
	char schreibenas[] = "Hallo Welt!";
	f=fopen("memo.txt","w+");
	if(f==NULL) {
            	printf("error");
            	}
	else {
     	fwrite(schreibenas,sizeof(schreibenas),1,f);
     	fclose(f);
     	}
}
 
int lesen() {
	FILE *f;
	char lesenas[1024];
	fopen("memo.txt","r");
	if(f==NULL) {
            	printf("error");
            	}
	else {
     	while(fgets(lesenas,sizeof(lesenas),f)!=0) {
                                                	fputs(lesenas,stdout);
                                                	printf("\n");
                                                	}
     	}
}
 
int main(void) {
 
	schreiben();
	lesen();
 
 
     	system("PAUSE");
     	return 0;
}

This post has been edited 2 times, last edit by "Helvete" (Nov 5th 2010, 2:47pm)


5

Friday, November 5th 2010, 2:50pm

Wenn ihr aus der Datei lesen wollt, könnt ihr in string2 nur ein char unterbringen ?(

fread liest zwar - aber warum sollte etwas auf dem Bildschirm zu erkennen sein? -> Ausgabe ergänzen!

Habt es ja geändert ;)

Hier noch ein Link:
http://www.cplusplus.com/reference/clibrary/cstdio/fread/
Da steht zwar C++ oben - in vielen, aber nicht in allen Fällen, kann man auch Lehren für C daraus ableiten.

Nachtrag:
Hier noch ein Beispiel mit weniger Sicherheitsabfragen:
http://www.math.tau.ac.il/~danha/courses…8-9/c11-fread.c

MfG bcc-fan

This post has been edited 2 times, last edit by "bcc-fan" (Nov 5th 2010, 3:04pm)


6

Friday, November 5th 2010, 7:17pm

Danke BCC jetzt funzts soweit jetzt muss ichs nur noch im dialog einlesen lassen

7

Friday, November 5th 2010, 8:58pm

So nun habe ich das ganze mal so geändert das ich mehrere Zeilen eingeben kann jetzt möchte ich das ich meine Eingabe mit einem Punkt beenden kann sieht so aus:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int schreiben(){
 
	int grenze=4000;
	char ende='.';
	int i;
 
/*Zeiger FILE enthält informationen zur Datei abwicklung und wird in stdio.h definiert*/
	FILE * Mem;
 
 /*Zu schreibender Text*/
	char schreiben[grenze];
 
	printf("Bitte den Text eingeben \n");
 
	for(i=0;i<sizeof(schreiben);i++){
 
	fgets(schreiben, grenze, stdin);
 
	if(schreiben[i]==ende){
 
   	printf("ich bins");
 
 
 
	}
 
 
 
	}




nun passt da leider etwas mit der If abfrage nicht er läuft einfach nicht rein nur zur info printf(" ich bins"); soll einfach nur zum test sein ob die abfrage geht eigentlich müsste dort ein break; rein damit die schleife abgebrochen wird also eingabe beendet wird oder ich schließe die datei wieder müsste sie dann aber wieder öffnen ist irgenwie blöd oder nicht ? aber dazu müsste ich erstmal in die if laufen was ich aber nicht tue stehe gard voll auf dem schlauch habe keine idee wie ich das machen könnte
bitte nochmals um eine kleine hilfe !

danke

8

Sunday, November 7th 2010, 6:55pm

So also hab das ganze jetzt nochmal bischen geändert jetzt funzts auch aber es sind nen paar fragen aufgekommen also folgendes:


C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if(Mem==NULL){
 
    	printf("error");
 
	}else{
 
   while(1){
 
 
    	fgets(schreiben, grenze, stdin);
    	if (schreiben[0]=='.')break;
 
    	time_t t;
    	time(&t);
 
    	fprintf(Mem, ctime(&t));
    	fprintf(Mem,"%s\n", schreiben);
 
    	fflush(stdin);
    	}



hab das ganze jetzt mit einer endlosschleife gemacht die überprüft ob denn der letzte buchstabe ein ' .' ist und siehe da er bricht ab aber wieso tut er das nicht bei meiner ersten variante


C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
for(i=0;i<sizeof(schreiben);i++){
 
fgets(schreiben, grenze, stdin);
 
if(schreiben[i]==ende){
 
   printf("ich bins");
 
}
 
}


hier passiert gar nichts läuft nicht mal in die if abfrage rein aber warum ist doch das gleiche in grün oder nicht ????

die zweite frage ist :




C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
while(1){
 
 
    	fgets(schreiben, grenze, stdin);
    	if (schreiben[0]=='.')break;
 
    	time_t t;
    	time(&t);
 
    	fprintf(Mem, ctime(&t));
 
 fwrite(schreiben,sizeof(schreiben),1,Mem);
    	fflush(stdin);
    	}


wenn ich fprintf durch fwrite ersetze dann haut er mir nur noch komisches zeugs raus:

Bitte den Text eingeben
Hallo C freunde
.
Sun Nov 7 18:54:20 2010
Hallo C freunde
��-l@g@{�� Press [Enter] to close the terminal ...


warum ist das so ??? fwrite ist doch genau das gleiche wie fprintf oder nicht????

Mit freundlichen grüßen

9

Monday, November 8th 2010, 11:57am

KAnnst du einmal den gesammten code posten?

Ich bin mir nicht ganz sicher was du machen willst...

Similar threads

Social bookmarks