Problem (ale nudna nazwa)

0

Mam taki problem, a raczej dwa i bardzo proszę o pomoc.

Kiedy tworzę w Builderze plik używająć funkcji FileCreate() to niestety próba wykorzystania tego pliku w następnej linijce programu (np. LoadFromFile()) kończy się fiaskiem. Dlaczego?

I jeszcze jedno: Czy jest funkcja, która tworzy plik i Od razu go wypełnia zdefniowaną zawartością?

0

Zapewne, funkcja FileCreate() otwiera plik z flaga FILE_SHARE_READ lub/i FILE_SHARE_WRITE, wiec plik nie moze byc wspoldzielony, a funkcja LoadFromFile() nie dziala dlatego ze nie ma dostepu do tego pliku, bo pewnie sama wewnatrz otwiera plik na nowo. Wiec albo zamknij plik, albo wczytaj z niego dane samodzielnie. W ogole troche dziwne to ze po stworzeniu nowego pliku chcesz cos z niego zczytywac...

0

NIe chcę nic z niego zczytywać, ale zapełnić zawartością. Stworzyłem sobie w tym celu ukryte Memo, które wykorzystuje do zapełniania pliku, ale ta technika jest trochę tandetna dlatego pytam o funkcjię, która Od razu zapisze coś do pliku. Jak zrobić to o czym piszesz? Bo coś mało zorientowany jestem.

0

Wiesz nie wiem w czym problem, chodzi o zwykle zapisanie czegokolwiek do pliku ?
Najprosciej to tworzysz plik funkcja FileCreate() (lub otwierasz, a wtedy potrzebne sa dodatkowe flagi, np wspoldzielenia pliku). Otrzymasz wtedy uchwyt do tego pliku. Nastepnie zapisujesz do niego dane z jakiegos bufora funkcja FileWrite(), ktorej przekazujesz uchwyt do pliku, bufor i rozmiar bufora. Na koncu zamykasz plik funkcja FileClose(), oczywiscie podajac uchwyt pliku. Nie koduje w bcb wiec moglem cos pomieszac.

0

W BCB najprościej jest zwykle użyć nader wygodnego strumienia z VCL: TFileStream. W większości wypadków poleciłbym właśnie tę możliwość, a nie trochę pokraczne FileCreate (ni to API, ni to VCL).

Aby utworzyć plik, zrób coś takiego:
TFileStream *saver = new TFileStream (nazwa_pliku, fmCreate);
Nazwa obiektu (saver) oczywiście dowolna. Poczytaj więcej o argumentach kontruktora w helpie, ale akurat w tym wypadku tworzy plik nowy lub na msce dotychczasowego o tej samej nazwie.

Żeby coś zapisać w pliku użyj metody Write:
saver->Write(adres_zmiennej, rozmiar_zmiennej), np.:
saver->Write(&a, sizeof(int));
Możesz tak też zapisywać całe tablice, czy w ogóle cokolwiek czego adres i rozmiar potrafisz określić.

Na zakończenie musisz zwolnić strumień: saver->Free();

0

Wielkie dzięki. Pokombinuje, a na pewno się uda.

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