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 ;)
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:13

- Rejestracja:około 15 lat
- Ostatnio:ponad 9 lat
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
- Rejestracja:około 18 lat
- Ostatnio:12 miesięcy
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.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:13
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.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:13
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.