Jeśli można to jak? Bo przeszukałem chyba wszystko i nie znalazłem.
Obawiam się, że nie można. Wywołując AssignFile otwieramy plik o podanej ścieżce i dalej operujemy jedynie na identyfikatorze tego pliku. Informacje o ścieżce są tracone, bo po co one nam są? Co najwyżej indeks w tablicy FAT jest potrzebny.
Ale przeciez skoro gdzies w programie jest wywolywane: AssignFile, to wiadomo jaka to sciezka :) wystarczy w momencie otwierania pliku to sprawdzic i gdzies zapamietac.. :) :P chyba ze sie myle :P :>
Własnie dlatego się dziwiłem tym pytaniem.. jest trochę bez sensu.. no bo w końcu musisz już znać scieżkę do pliku... skoro wywołałeś AssignFile :-|
Nie ma kłopotu. Tak file, jak i text są szczególnymi rekordami... Musisz po prostu szobić cos takiego:
type at=array[0..sizeof(text)-1]of char;
var t:text;
begin
assign(t,'mojanazwa');
end.
a w watches:
at((@T)^)
Muszisz sobie policzyć od której pozycji zaczyna się ciąg znaków. Ciąg na pewno jest zakończony zerem.
Bo przeszukałem chyba wszystko
Nie wszystko.
Oto kod, który wyciąga nazwę tudzież sprawdza, czy było AssignFile (vide Twój poprzedni post) tudzież czy plik jest otwarty - dla plików tekstowych i zwykłych.
procedure TForm1.Button1Click(Sender: TObject);
var
ATFile: TextFile;
TR:TTextRec absolute ATFile;
AFile: File;
FR:TFileRec absolute AFile;
begin
TR.Name:='unassigned';
FR.Name:='unassigned';
//bo rekord sie sam nie inicjalizuje
Memo1.Lines.Add('Przed assign '+TR.Name);
AssignFile(ATFile,'c:\test.txt');
Memo1.Lines.Add('Po assign '+TR.Name);
if TR.Mode=fmClosed then
Memo1.Lines.Add('zamkniety')
else
Memo1.Lines.Add('otwarty');
Reset(ATFile);
if TR.Mode=fmClosed then
Memo1.Lines.Add('zamkniety')
else
Memo1.Lines.Add('otwarty');
CloseFile(AtFile);
Memo1.Lines.Add('Przed assign '+FR.Name);
AssignFile(AFile,'c:\new.sta');
Memo1.Lines.Add('Po assign '+TR.Name);
if FR.Mode=fmClosed then
Memo1.Lines.Add('zamkniety')
else
Memo1.Lines.Add('otwarty');
Reset(AFile);
if FR.Mode=fmClosed then
Memo1.Lines.Add('zamkniety')
else
Memo1.Lines.Add('otwarty');
CloseFile(AFile);
end;
Struktura rekordów TFileRec i TTextRec jest nie tylko w książce Raya Lischnera Delphi.Almanach, którą powinien mieć każdy programujący w Delphi, którego ambicje sięgają powyżej programów '3 buttony i splashscreen'. Znajduje sie także w pewnym niesłychanie tajnym i trudnym do znalezienia źródle. Ale ja podpowiem, jak się do tego źródła dostać. Należy otworzyć Delphi i tam, wbrew temu, co każdy mógłby przypuszczać, wejść do menu help >Delphi help.
Następnie w find wpisujemy TFileRec lub TTextRec (niewiarygodnie sprytne, nieprawdaż?) i dalej już chyba nie będzie trudno.
No tak, ale możemy nie wiedzieć, jak się nazywają te rekordy. Co wtedy, olaboga??? To już wyższa szkoła jazdy: otóż otwieramy Delphi, wchodzimy w help>Delphi help i w Find wpisujemy tajny kod. Trzeba nad tym kodem sporo pogłówkować, więc pomogę: na przykład zadziała 'files text typed untyped'. Ponadnaturalnym i tajemniczym sposobem pojawi się lista kilku tematów, na której będzie m.in. File types...
hmm, ale po co ten ironizm?
Delphi help używam bardzo często, bo nie wiem wszystkiego, a tego szukałem jedynie dając zapytanie "textfile" i niestety nie znalazłem tam odpowiedzi. Rzeczywiście nie wiedziałem jak nazywają się te rekordy.
Co do innych zapytań w pomocy, to rzeczywiście mogłem pogłówkować bardziej, ale zniechęcił mnie brak czegokolwiek przy "texfile" i myślałem, że nic więcej nie znajdę.
Jednak dzięki za rozwiązanie problemu.
PS: nawet pozornie łatwy problem, którego nie mogę rozwiązać nie oznacza tego, że nie szukałem w pomocy lub na forum/faq.
hmm, ale po co ten ironizm?
Sorry, znalezienie tego rzeczywiście nie jest takie proste, jeśli się z góry nie wie, czego szukać. Trafiłeś na zły humor zgryźliwego pq i się nie przejmuj :). A wyżej wspomnianą książkę bardzo polecam!!
Mały OT zrobię, ale to ten temat mnie natknął i troszkę jest związane.
Zerknąłem do tych rekordów (kiedyś przy szperaniu w helpie na nie trafiłem, ale nie skojarzyłem tego z plikami Text i file of).
W opisie tych struktur jest zawsze Handle. Wcześniej wydawało mi się, że za pomocą BlockRead i BlockWrite korzystamy z plików używając File Control Block, a nie uchwytów.
Wobec tego pytanie. Czy w Delphi (lub Pascalu) jest gdziekolwiek używany tryb dostępu do plików za pomocą FCB? Wiem, że to archaiczne, ale ma kilka ciekawych możliwości, których próżno szukać w dostępie poprzez uchwyty.
ale ma kilka ciekawych możliwości
jakich?
ale ma kilka ciekawych możliwości
jakich?
Np. możliwość tworzenia woluminów lub dostęp do poszczególnych klastrów na dysku (dostęp nie musi być sekwencyjny).
Mądrzę się daleko poza granicami moich rzetelnych wiadomości, ale przypuszczam, że podobne zabawy (dostęp do klastrów) i tak będą zablokowane przez system. Przynajmniej XP.