Przechowywanie pliku w programie.

0

Czy jest jakaś opcja żeby przechowywac plik w programie? i jesli to możliwe wgrać go do pamięci lub mieć dostęp tam gdzie jest przechowywany. Chce żeby ten plik był razem z programem.

1

To zależy do czego Ci on potrzebny;

Jeżeli plik potrzebny jest tylko do odczytu danych, możesz go umieścić w zasobach pliku wykonywalnego oraz ładować do programu na podstawie jego nazwy lub identyfikatora liczbowego; Więcej na ten temat możesz wyczytać w dokumentacji i w materiałach w sieci;

Jeżeli plik ma służyć także do zapisu danych (modyfikacji) to zasoby odpadają, bo póki proces aplikacji działa, blokuje możliwość modyfikacji pliku wykonywalnego, który ten proces uruchomił; W takim przypadku dane będziesz musiał trzymać w zewnętrznym pliku dyskowym i taszczyć go za plikiem exe; Nie jest to złe rozwiązanie, o ile weźmiesz pod uwagę np. ograniczenia narzucone przez UAC lub typ nośnika, z którego uruchamiany jest program;

Tak więc jeśli potrzebujesz konkretnej porady to podaj więcej szczegółów na temat tego programu.

0

Plik ma służyć tylko do odczytu. Są to pewne dane do których muszę mieć dostęp. Jak załądować taki pik za pomocą identyfikatora liczbowego? oraz jak go załączyć.

0

Poczytaj o klasie TResourceStream. W Google jak wspominał @babubabu jest mnóśtwo przykładów. Jeżeli chodzi o identyfikator liczbowy, to za pewne chodzi Ci o konstruktor CreateFromID tej klasy.

1

@piter2004 - w dalszym ciągu nie podałeś jaki to plik, więc nie wiadomo którą klasę wykorzystać; Poza tym, jeżeli ładowanie na podstawie ID zasobu nie jest wymagane to skorzystaj z ładowania na podstawie nazwy (czyli TResourceStream.Create) - będzie czytelniej; Nie wiemy też której wersji Delphi używasz, bo tego też nie podałeś; A różne wersje środowiska posiadają różne RTL i VCL, więc i różne klasy z różną ilością metod są możliwe do wykorzystania;

Niektóre klasy do obsługi plików mogą posiadać w sobie metody ładujące kontent z zasobów; Gdybyś używał Free Pascala, a tym plikiem był konfig w formacie TreeStructInfo, zawartość mógłbyś załadować jedną metodą, bez zbędnych pierdół, strumieni itd.:

var
  tsiConfig: TTSInfoTree;
begin
  tsiConfig := TTSInfoTree.Create();
  try
    tsiConfig.LoadFromResource(HInstance, 'ResConfig', 'RT_TSINFO');  // tyle wystarczy

{..}

Ale nie korzystasz ani z jednego, ani z drugiego, więc albo podaj bardziej szczegółowe informacje na temat środowiska i tego magicznego pliku, albo sam poszukaj odpowiedniej klasy i sposobu na załadowanie zawartości pliku z zasobu.

0

Używam delphi 2009. Plik to zwykły plik binarny gdzie sa zapisane tylko dane hexadecymalnie. Ma on rozmiar $22000 bajtów.

1

Nie ma czegoś takiego jak "zwykły plik binarny" - każdy plik to plik binarny, Twój co najwyżej jest amorficzny;

Podaj strukturę tego pliku i typy danych, które wymagane są do odczytu informacji.

0

Plik jest typem amorficznym. Jest to program wsadowy do układu scalonego który programuje przez usb. Czyli jak go odczytam musze go załadowaywac do pamięci skąd go wyśle poprzez usb.

1

Nie, plik jest amorficzny lub jego zawartość - nie typ :]

W takim razie dane w postaci końcowej jakiego mają być typu? Chodzi o to, jaki typ danych ma być wykorzystany do transmisji; Jeżeli ma to być po prostu ogólny bufor danych (po prostu przesyłasz oryginalną zawartość pliku) to skorzystaj z klasy TResourceStream oraz jej właściwości Memory - ona zwróci wskaźnik na bufor.

0

To jest ogólny bufor danych. Tylko zastanawiam się jak ja mam połaczyć ten plik z moim plikiem wynikowym exe.

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