Mo?żna wyciągnąć z TextFile ście?żkę do p

0

Jeśli można to jak? Bo przeszukałem chyba wszystko i nie znalazłem.

0

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.

0

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 :>

0

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 :-|

0

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.

0

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...

0

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.

0

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!!

0

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.

0

ale ma kilka ciekawych możliwości

jakich?

0

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).

0

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.

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