[C] Datei auslesen und schreiben

TheLamer

Mitglied
schon mal vorweg JA ich habe die suchfunktion genutzt und ja ich habe auch was gefunden nur ich bin net draus schlau geworden

also ich möchte das einfach etwas in deine datei reingeschrieben wird
was über eine scanf eingabe eingegeben wurde

halt in die datei text.txt


dann soll er das wieder ausgeben

die ausgabe bekomm ich glaube ich auch noch hin
aber wie soll ich die eingabe machen bitte schön einfach erklähren *bin nen c *

danke schon mal"
lamer
 
Auch wenn du in der Suchfunktion DAZU bestimmt was findest, der prinzipielle Ablauf:

1. Mit scanf Buffer füllen.
2. Datei öffnen
3. Buffer in Datei schreiben
4. Datei schließen

zum öffnen:
1. Datei öffnen
2. ganze Datei in Buffer lesen
3. Datei schließen
4. Buffer ausgeben

Ich bin mir sicher darauf bist du selbst auch schon gekommen, aber versuch zumindest erstmal einen Ansatz selbst zu programmieren, davon hast du letztendlich mehr, als wenn dir hier der fertige Brei serviert wird.
 
jo danke schon mal aber soweit war ich auch
die ideen für so was habe ich meistens nur mit den befehlen haperts immer soon bischen

und kann mir mal einer buffer erklären ist das die variable wo ich den eingegebenen text zwischengespeichert habe


soo ausgabe habe ich

ps
suche habe ich was gefunden nur nicht verstanden da da immer nur soo code stücke waren!

Code:
#include<stdio.h>

struct Demo
{
	char text[50];

}text[10];

int main(void)
{
	FILE *datei;
	char text[50];
	printf("bitte gieb deinen text ein");
	scanf("%s",text);

	 datei = fopen("test.txt","r+");
	 printf("%s",datei);
	 while(!feof(datei))
	 putchar(fgetc(datei));

		fwrite(text,sizeof(struct Demo),10,datei);
	fclose(datei);

	return 0;

}

nun habe ich das poblem das der ne menge müll in die datei schreibt

dasdasdasdas ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ kB Àÿ 9@  P† ?
† ‚ ðý plW€”ÿ =&ôàÿ $?@ HDB ðÿ iëåw‚ ðýô<&ôÈÿ jS€ÿÿÿÿ†»çwZçw P@ Actx  < |    4 ¬   d Š [IY-ð 2 $ ¨   Œ   ¬    Ì p  SsHd,     ˆ  , Z Z  $ 4 C : \ W I N D O W S \ W i n S x s \ d ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ kB Àÿ 9@  P† ?
† ‚ ðý plW€”ÿ ýëôàÿ $?@ HDB ðÿ iëåw‚ ðýôüëôÈÿ jS€ÿÿÿÿ†»çwZçw P@ Actx  < |    4 ¬   d Š [IY-ð 2 $ ¨   Œ   ¬    Ì p  SsHd,     ˆ  , Z Z  $ 4 C : \ W I N D O W S \ W i n S x s \ dasda ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ kB Àÿ 9@  P† ?
† ‚ ðý plW€”ÿ ÍÙõàÿ $?@ HDB ðÿ iëåw‚ ðýôÌÙõÈÿ jS€ÿÿÿÿ†»çwZçw P@ Actx  < |    4 ¬   d Š [IY-ð 2 $ ¨   Œ   ¬    Ì p  SsHd,     ˆ  , Z Z  $ 4 C : \ W I N D O W S \ W i n S x s \

^^sieht e aus oder *g*
 
Zuletzt bearbeitet:
Ok, ein Anfang, wenn auch ein wirrer :).
Versuch's mal so:

Code:
int main(int argc, char* argv[])
{
  FILE *datei;
  char text[256];
  //Text einlesen
  printf("bitte gieb deinen text ein");
  scanf("%s",text);

  ///////////////////
  //Schreiben

  //Datei öffnen, Flag beachten, du hattest zum Lesen geöffnet
  datei = fopen("test.txt","w+");

  //in Datei schreiben
  fwrite(text,1,strlen(text),datei);

  //Datei schließen
  fclose(datei);

  ///////////////////
  //Einlesen

  //Datei öffnen
  datei = fopen("test.txt","r+");

  //Dateilänge erhalten
  fseek (datei , 0 , SEEK_END);
  int lSize = ftell(datei);
  rewind (datei);
  //wenn zu groß, beschränken
  if (lSize > 255) lSize = 255;

  //aus Datei lesen
  memset(text,0,256);
  fread(text,1,lSize,datei);

  //Datei schließen
  fclose(datei);

  //ausgeben
  printf(text);

  return 0;
}

Das Problem mit der beschränkten Einlesegröße kann man mit dynamischer Speicherverwaltung lösen, also Speicher mit malloc reservieren (mal selbst darüber schlau machen). Die Struktur, die du da benutzt hast, hat für mich jetzt mal keinen Sinn gemacht, deswegen habe ich sie rausgeworfen. Wenn das einen tieferen Sinn hatte, bitte erläutern :). Ach ja, der Grund weshalb nur Müll reingeschrieben wurde, liegt vermutlich daran, dass du fwrite falsch benutzt hast, du hast nämlich 10 * sizeof(Demo) Bytes geschrieben, also 500. Hoffe es sind keine Syntax (oder Logik) Fehler drin, hab's nicht getestet.
 
Zurück