PasjaGSM.pl
  Jesteś w: Forum > Obsługa katalogów


Obsługa katalogów

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Obsługa katalogów
Poprzedni temat «» Następny temat
Autor Wiadomość
 
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-06, 13:24   Obsługa katalogów

Cześć.

Chciałbym tylko uprzedzając ewentualne pytania i rozwiązania "na około" wskazać na kilka rzeczy nowych w systemie plików z obsługą katalogów.

Większość funkcji "zewnętrznie" nie uległa zmianie. Jednak wszystkie, które do tej pory jako parametru oczekiwały nazwy pliku, teraz oczekują pełnej do niego ścieżki dostępu.

Ścieżki dostępu są unix'owe a więc:
Katalog główny: /
Plik a.txt w katalogu głównym: /a.txt
(ze względu na kompatybilność z poprzednią wersją możliwy jest też zapis po prostu a.txt co również oznacza plik w katalogu głównym)
Plik a.txt w katalogu folder: /folder/a.txt

Ścieżki te nie powinny być jednak pokazywane użytkownikowi w tej postaci. Chodzi o to, żeby mogły tego używać osoby które np. nie wiedzą co to za folder "/". Dlatego w przypadku wyświetlania ścieżki, należy użyć funkcji tfsuserpath(). Przykładowo wersja "userska" ścieżki "/" to "(główny)" (oczywiście zależnie od ustawionego języka). Ścieżka zwracana przez tą funkcję znajduje się w nowo zaalokowanym bloku pamięci więc po użyciu należy koniecznie ją zwolnić używając free().

Generalnie sam katalog w nowym TFS'ie jest plikiem. Tak więc wywołanie tfsstat("/folder") gdzie /folder jest katalogiem, spowoduje zwrócenie znanego już wskaźnika TFILE *. Tak jak przy pliku możemy na nim używać makr TFS_xxx().

Wyjątek stanowi tu katalog główny ("/"). Wywołanie tfsstat("/") zawsze zwraca NULL, nie z powodu błędu ale po prostu dlatego, że katalog główny nie istnieje fizycznie na dysku tak jak podkatalogi i dlatego funkcja nie ma co zwrócić. Należy przewidzieć taki przypadek.

Nowe makra TFS_FILE() i TFS_DIRECTORY() pozwolą szybko zadecydować, czy mamy do czynienia z plikiem czy katalogiem.

Z katalogu możemy normalnie wyciągnąć też nazwę (TFS_NAME()) czy atrybuty (TFS_ATTRS()) (konkretne atrybuty nazywają się TFS_A_HIDDEN oraz TFS_A_RDONLY). Nie ma oczywiście sensu wyciągać danych z katalogu. Jest to możliwe ale to co tam znajdziecie jest wewnętrzną sprawą systemu plików i nie należy tego ruszać.

Skoro jesteśmy przy atrybutach. Obecność konkretnego atrybutu lepiej sprawdza się makrami TFS_HIDDEN() oraz TFS_READONLY().

Aby ustawić atrybuty należy użyć funkcji tfsattrs(). Działa ona oczywiście zarówno dla plików jak i katalogów i to niezależnie od poprzedniego stanu atrybutu "read-only".

Poprzednio było tak, że nazwa wyciągnięta ze wskaźnika za pomocą TFS_NAME() mogła być używana przy innych funkcjach (np. tfsstat(TFS_NAME(fp)) zwracał zawsze ten sam fp). Z katalogami oczywiście tak już nie jest. Wyciągnięta nazwa jest samą nazwą pliku, bez ścieżki dostępu. Dlatego powstała nowa funkcja, tfspath(). Potrafi ona z podanego wskaźnika na plik stworzyć pełną ścieżkę dostępu do niego. Ścieżka alokowana jest jako nowy blok pamięci więc po użyciu należy ją zwolnić za pomocą funkcji free().

Jeśli chodzi o listowanie katalogów to służy do tego ta sama funkcja tfsnext(). Drugi parametr, który w poprzedniej wersji systemu plików był zawsze NULLem, teraz jest wskaźnikiem na ścieżkę dostępu do listowanego katalogu. Należy bezwzględnie podawać tę samą ścieżkę do wszystkich wywołań tej funkcji podczas całego procesu listowania.

Samo listowanie wygląda następująco. Wywołujemy tfsnext() jako wskaźnik do pliku podając NULL a jako katalog podając na przykład "/folder". W rezultacie otrzymamy wskaźnik na pierwszy plik/katalog w katalogu "/folder". Podając go do funkcji tfsnext() (razem z tą samą nazwą katalogu a więc "/folder") otrzymamy wskaźnik na następny plik/katalog. Operację powtarzamy aż funkcja zwróci NULL.

Katalogi tworzymy funkcją tfsmkdir(). Funkcja oczekuje dwóch parametrów, ścieżki dostępu do nowego katalogu oraz jego atrybutów. Oczywiście funkcja tworzy tylko jeden katalog a więc stworzenie katalogu "/folder/nowe" gdy nie istnieje katalog "/folder" zakończy się niepowodzeniem (TFSERR_NOFILE).

No to z podstawowych rzeczy chyba wszystko. Jakby co, pytajcie, postaram się pomóc.

Dokładny (aktualny) opis wszystkich funkcji znajduje się oczywiście tu (po ang.):
http://nokix.pasjagsm.pl/...lude/tfs-h.html

Pozdrawiam
[Yak]
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Podobne tematy
Temat Autor Forum Odpowiedzi Wysłany
Brak nowych postów [ Obsługa] Szybkość działania Gingera olcrfabo Ginger 4 2008-04-25, 20:13
Brak nowych postów [ Obsługa] Problem z linią 60 w wersj... shephard Ginger 1 2008-05-01, 08:45
Brak nowych postów [ Obsługa] Zmiana rozmiaru czcionki frayer Ginger 3 2008-09-07, 15:43
Brak nowych postów Ginger -Obsługa przez modele z ekrane... pans Ginger 1 2009-01-17, 12:10
Brak nowych postów [Obsługa] 6310i dla Poznania foamy Ginger 0 2011-02-17, 18:30