Porgram do katalogowania płyt

0

witam,
muszę napisac program do katalogowania płyt CD, a więc tzreba zapisac jakos w pliku całą strukture plikow i katalogow do pliku. Ja zrobilem to tak:

K|katalog 1|
P|plik1|123|32211|ah
P|plik2|163|3781|ar

czyli zapisuje informacje o rodzaju obiektu (K albo P) i dalej nazwe, rozmiar, date modyfikacji i atrybuty.
to wszystko leci do pliku tekstowego. oczywiscie potem trzeba to odczytac i odpowiednio zaprezetowac, ale to juz banal.

mam tylko pytanie czy jest jakis lepszy sposub zapisu, moze juz ktos z was cos takiego pisal. ten moj sposob na pewno nie jest najszybszy, a mi zalezy na szybkoszci odczytu danych. np. gdy podam sciezke: katalog1\katalog2\katalog3 to program powinien bez opoznien podac mi liste plikow i podkatalogow w tym folderze.

z gory dzieki za ewentualne rady.

0

Pliki typowane lub amorficzne. Plik tekstowy jest o dostępie sekwencyjnym, tak więc aby odczytać rekord nr 2000 musisz odczytać 1999 rekordów przed nim. Plik amorficzny o swobodnym dostępie pozwoli na łatwiejszy dostęp do rekordu. X*SizeOf(struktura). Ponadto plik tekstowy łatow edytować, a plik binarny jest nazwijmy to "zakodowany". Dzieki temu kontrola danych będzie na etapie zapisywania do pliku, a nie odczytywania. Ja widzę to tak:

type
 TMyRec = record
  autor, tytul :string[20];
  album :string[10];
  czas :word; // długość zapisuj w sekundach. Jedno pole mniej
end;

var
 MyRec :array [0..ileś] of TMyRec;
//
//
// później zapis
BlockWrite(Plik, MyRec, SizeOf(MyRec));
// odczyt
BlockRead(Plik, MyRec, SizeOf(MyRec));

Można też zamiast całej struktury odczytać pojedynczy rekord.

0

Plik amorficzny o swobodnym dostępie

to jest to, szybki odczyt [browar], ale czy moglbys mi podac wiecej szczegolow na temat zapisu i odczytu. na przyklad , wiem jak skoczyc do rekordu o jakims tam numerze, ale jak skoczyc do rekordu jak wiem co on zawiera a nie znam jego numeru, to i tak trzeba przeleciec wszystko ,

chyba sie zgubilem :-/ [glowa]

0

Zakładam, że wczytałeś całą tablicę, tak więc szukanie będzie tak (operacje w pamięci wykonują się szybko):

const max = 20;

type
 PTab = ^TTab;
 TTab = array [1..Max] of record
   Tytul, Album :string[20];
 end;

var
 Tab :PTab;
 F   :file;

function szukaj(Tytul :string) :integer;
var i :integer;
begin
 for i := 1 to Max do
  if Tab^[i].Tytul = Tytul then
     begin
      szukaj := i;
      break;
     end;
end;

procedure Odczyt;
begin
 AssignFile(F, FileName);
 try
  Reset(F, 1);
  BlockRead(F, Tab^, SizeOf(TTab));
  CloseFile(F);
 except
  on Ex :EInOutError do ShowMessage('Komunikat');
 end;
end;

procedure Zapis;
 AssignFile(F, FileName);
 try
  Reset(F, 1);
  BlockWrite(F, Tab^, SizeOf(TTab));
  CloseFile(F);
 except
  on Ex :EInOutError do ShowMessage('Komunikat');
 end;
end;


begin
 New(Tab);
 Odczyt;
 // operacje inne
 Zapis;
 Dispose(Tab);
end.

0

dzieki, o to chodzilo :-)

0

Witam:

Najlepiej wrzucić wszystko do tabelek z blobami ; )

http://ge0dezja.republika.pl/delphi/cd.html

Pozdrawiam

0

czym są bloby?

0
raastaa napisał(a)

czym są bloby?

BLOB - binary large object (chyba) - specjalny typ pola w bazach danych. Można w nich przechowywać "wszystko". Nadają się również do przechowywania tekstów (jak np lista plików i katalogów na płytce).

0

to BLOBy nie sa dla mnie, ja te liste plikow i katalogow bede przechowywal w osobnych plikach a nie w bazie danych (jeden CD = jeden plik)

0
raastaa napisał(a)

(jeden CD = jeden plik)

Nie jest to najlepszy pomysl. Jesli nie chcesz "prawdziwej" bazy danych, pomysl nad wlasna struktura pliku, ale nie generuj osobnego pliku dla kazdego CD.

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