Zum Inhalt springen

Datei auslesen mit Fread


voldemort

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...