Jump to content
mile95

Problema C Fisiere binare

Recommended Posts

Posted

/*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <conio.h>

#include<string.h>

void main()

{

FILE *f;

char fnume[10];

char continut[100];

int poz;

printf("Introduceti numele fisierului:"); gets(fnume);

printf("Introduceti textul pe care il doriti introdus in fisier: "); gets(continut);

errno_t err;

err = fopen_s(&f, fnume, "w");

for (int i = 0; i < strlen(continut); i++)

{

printf("%c", continut);

fwrite(&continut, sizeof(int), 1, f);

}

fclose(f);

_getch;

}

/* Problema merge dar textul introdus in fisier este scris in Chineza. Am folosit " printf("%c", continut); " doar ca sa vad daca textul ii memorat corect si este. Ce am gresit de ii scris in Chineza ? */

Posted

Salut, problema ta e relativ simpla.

Functia fwrite are urmatoarea semnatura:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).

Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.

Exemplu:

Input : ala bala porto cala;

tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.

Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect.

Posted
Salut, problema ta e relativ simpla.

Functia fwrite are urmatoarea semnatura:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Tu ca si marime, trimiti marimea unui int(care e mai mare decat un char).

Asta inseamna ca pentru fiecare caracter tu defapt scrii mai mult.

Exemplu:

Input : ala bala porto cala;

tu citesti a, dar scrii in fisier al sau ala sau eu stiu, mai mult, pentru ca atunci cand spui size(int) ii spui citeste primi x bytes.

Schimba din fwrite(&continut, sizeof(int), 1, f); in fwrite(&continut, sizeof(char), 1, f); si ai sa vezi ca functioneaza perfect.

oooh acum am vazut si eu int in loop, eu m-am oprit la gets() ca nu-mi place.

Posted

ti-am lasat in comentarii si functia de afisare pe ecran, sa vezi ca a functionat cum trebuie


/*Cerinta:Sa se citeasca de la tastatura numele unui fisier binar si un text. Sa se creeze fisirul dupa numele dat si poi sa se intratora textul in el*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void verific (FILE *f)
{
if(f == NULL)
{
printf("Eroare fisier.");
exit(EXIT_FAILURE);
}
}

int main()
{
char nume_binar[30];
char sir[100];

printf("Nume fisier binar: [exemplu.dat] ");
gets(nume_binar);

FILE *f=fopen(nume_binar,"wt");
verific(f);
int n,i=0;
printf("Citesc sir, sirul de incheie cu enter \n");
gets(sir);
fwrite(&sir[i++],sizeof(char),strlen(sir),f);
fclose(f);
return 0;

}


/*

int main()
{
char nume_binar[30];
char sir[100];

printf("Nume fisier binar: [exemplu.dat] ");
gets(nume_binar);
FILE *g=fopen(nume_binar,"rt");
verific(g);
int n,i=0;

fseek(g,0L,2); //ma pozitionez la sfarsitul fisierului
n=ftell(g)/sizeof(char); //ftell returneaza pozitia curenta a cursorului (care este la sfarsit) dar o impart la numarul de octeti necesari unui caracter, sa determin dimensiunea sirului
fseek(g,0L,0); //// ma pozitionez la inceputul fisierului

fread(&sir[i++],sizeof(char),n,g);
puts(sir);

fclose(g);
return 0;

}

*/

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...