Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Datei auslesen mit Fread

Empfohlene Antworten

Veröffentlicht

hallo,

ich bin etwas länger auf der suche nach einem fehler in meinem programm.

das programm soll entweder per drag and drop, oder per pfad eingabe ausgeführt werden. es soll mit 16 byte(=1block) gelesen werden.


int menge;

	int groesse = 16;

	int block = 1;

	char puffer;

	char pfad[100];


	if (argc != 1)

	{


		FILE*datei = fopen (argv[1],"r");


		if (datei == NULL)

		{

			printf("Error");

		}

	}


	else 

	{

		printf("Bitte geben Sie den Pfad an\n\n");

		gets(pfad);


		FILE*datei = fopen (pfad,"r b");


		if (datei == NULL)

		{

			printf("Error");

		}


		do

		{

			menge = fread (&puffer,groesse,block,datei);


			if (menge != 16)

			{

				break;

			}


			printf("%c",puffer);


		}while (true);


		fclose(datei);

	}

	return 0;

}

vielleicht kann mir jemand helfen und sagen wo mein fehler ist, oder evtl sind.

grüße

ich übergebe doch mit groesse meine 16 byte und das einmal mit block =1.

versteh ich nun hier etwas falsch?

es handelt sich hier um eine aufgabe aus der schule die besagt das die ausgabe auf dem bildschirm zu sehen sein soll.

grüße

int groesse = 16;
char puffer; //reserviert genau 1 char (=1Byte) an Puffer
&puffer //Cave: Bereichsüberschreitung!
versuchs mal mit
char *puffer;

[...]

puffer = (char*)malloc(siezeof(char)*groesse));

Dann klappt's auch mit dem Nachbarn;)

Bearbeitet von lilith2k3

wenn ich sage

char puffer[16]

meckert zwar der compiler nicht mehr, aber ich bekomm auch keine ausgabe auf dem bildschirm.

ok. so weit so gut.


int menge,i;

	int groesse = 16;

	int block = 1;

	char puffer[16];

	char pfad[100];


	if (argc != 1)

	{


		FILE*datei = fopen (argv[1],"r");


		if (datei == NULL)

		{

			printf("Error");

		}

	}


	else 

	{

		printf("Bitte geben Sie den Pfad an\n\n");

		gets(pfad);


		FILE*datei = fopen (pfad,"r b");


		if (datei == NULL)

		{

			printf("Error");

		}


		do

		{

			menge = fread (&puffer,groesse,block,datei);


			if (menge != 1)

			{

				break;

			}


		for (i=0;i<15;i++)

		{

			printf("%c",puffer[i]);

		}


		}while (true);


		printf("\n");


		fclose(datei);

	}

	return 0;

}


jetzt hab ich das problem das meine auszulesende datei mittendrin abgebrochen wird.

if (menge != 1)

Warum brichst du ab, wenn dir ein Lesevorgang, der 16 Bytes lesen soll, nicht genau 1 Byte liefert? Menge sollte doch üblicherweise 16 sein, am Ende der Datei vermutlich weniger.

Du kannst nicht davon ausgehen, dass fread dir die vollen 16 Bytes liefert. Das ist aber kein Grund zum Abbrechen. Statt dessen musst du das in der Ausgabeschleife berücksichtigen.

if (menge != 1)

Warum brichst du ab, wenn dir ein Lesevorgang, der 16 Bytes lesen soll, nicht genau 1 Byte liefert?

Nachtrag: Mein Fehler, das ist natürlich Blödsinn. fread gibt nicht die Anzahl der Bytes zurück. Insofern passt 1.

Wie groß ist die Datei denn? Und an welcher Stelle wird abgebrochen? Ist das überhaupt eine Textdatei?

  • 2 Wochen später...

sorry, war im urlaub.

es handelt sich hier um eine reine txt datei und aus einem mir nicht erklärlichen grund bricht das programm immer an der gleichen stelle ab.

in so fern sieht es noch nicht mal nach abbrechen aus, sondern das programm gibt an das es hier fertig ist.

grüße

es handelt sich hier um eine reine txt datei und aus einem mir nicht erklärlichen grund bricht das programm immer an der gleichen stelle ab.
An welcher Stelle genau passiert es denn? Was steht an dieser Stelle in der Datei? Wie groß ist die Datei genau?

An gafsa_lagare:

Dein Thread ist hier.

Bitte nicht einfach fremde Threads kapern.

an der stelle steht ein : oder ein leerzeichen. das ist natürlich nun schwer zu sagen da das programm denkt es sei hier fertig. die datei ist nur 4KB groß.

es handelt sich um eine ipconfig.

grüße

an der stelle steht ein : oder ein leerzeichen. das ist natürlich nun schwer zu sagen da das programm denkt es sei hier fertig.
Du könntest die einzelnen menge-Werte aufsummieren, dann wüsstest du es genau. Dann könntest du mit einem Hex-Editor prüfen, was genau an dieser Stelle in der Datei steht.

die datei ist nur 4KB groß.
Ich hatte ausdrücklich nach der genauen Größe gefragt ;). Wenn es geht, in Bytes.

Du könntest die Datei auch zippen und hier anhängen.

oh sorry. die datei ist natürlich 3.764 Bytes groß ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.