C - odczyt z pliku w trybie binarnym

0

Witam!
Piszę właśnie projekt na zaliczenie w języku C. Otóż w skrócie- jeden program pobiera znaki 1 i 0 z konsoli (wpisywane z klawiatury) i ma je zapisać do pliku. Zdecydowałem się na zapis binarny, gdyż później mi to trochę ułatwi. Drugi program ma otwierać ten plik i pobierać z niego dane do obróbki. Ale nie byle jak - chciałbym żeby pobierał sekwencje po 8 znaków char - w sensie pobieram 8 znaków z pliku i zapisuję np do tablicy. I tak, aż się plik nie skończy. Problem jest w tym, że plik może mieć różny rozmiar, zależny od ilości wprowadzonych danych do pierwszego programu - jak więc to zrobić? Znajomy polecił mi, abym zrobił strukturę i fscanf-em do niej zapisywał, ale nie bardzo zrozumiałem o co mu chodzi? Mam nadzieję, że w miare jasno opisałem.
Z góry dziękuję za jakąś pomoc/wskazówki ;)

0

Jeśli do pliku zapisujesz binarnie to odczyt też musi być binarny. A więc nie możesz wczytywać fscanf bo ten ci źle wczyta. Ja bym to zrobił tak


char tekst[8];
FILE*plik;
plik=fopen("plik", "br");//otwieramy do odczytu plik binarny

if(plik==NULL)//jesli sie nie udalo tworzyc konczymy programy
   return 1;

while(!feof(plik))/wczytyjemy dopóki nie napotkamy końca pliku
{
  fread(tekst,1,8,plik);//wczytujemy do tablicy elementy binarnie
}

aktualnie nie pamiętam jak dokladnie działa fread() bo ostatnio używałem go ucząc się C czyli jakiś czas temu ale na 100% jesli chcesz odczytywać plik binarny musisz używać fread.

Pozdrawiam

0

Zapis binarny odnosi się do znaków końca linii. Tyle, nie dorabiajmy do niego żadnej filozofii.

Żeby poznać wielkość pliku możemy użyć fseek oraz ftell. Aczkolwiek, żeby uzyskać poprawną wielkość pliku przy pomocy tej metody, musisz otworzyć plik w trybie binarnym. Wtedy będziesz mógł sobie podzielić tą wielkość przez wielkość zestawu i dostaniesz ich ilość.
Ewentualnie zapisać liczbę z ilością zestawów na początku pliku.
Albo użyć metody wymienionej wyżej, ale wtedy musisz (niepotrzebnie) bawić się z alokacją pamięci.

0

Ok, będę kombinował z tym. Jak nie wyjdzie to będę pisał.
Rozmiar pliku będzie niestety zmienny, zależny od ilości wpisanych danych i to program ma sobie sprawdzić ile ich jest i poprawnie je obsłużyć. Nie mogę więc na początku pliku zdefiniować rozmiaru.

0

Może tak:
PROGRAM 1 - tu wklepuję jakieś ciągi znaków np 10 10 1111 11 11 1100 11 ..... bla bla; tu wpisuje na przyklad użytkownik 1 wpisuje jakieś dane i zamyka program. Program to zapisuje do pliku binarnie.
PROGRAM 2 - tu może obsługiwać inny użytkownik, mając dany plik przygotowany przez PROGRAM 1. Więc użytkownik 2 nie wie jaki jest rozmiar pliku poprzedniego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1