Здравствуйте DeaDMan_77, Вы писали:
D7>Необходимо открыть файл (впринципе нужен только для чтения), который постоянно обновляется, я так понимаю постоянно занятый другим приложением. Блокнотом открывается, а Делфями никак, пишет что неможет открыт файл. D7>Так вот, всезнающий All, подскажи как же мне это сделать.
Предположу(1), что под "открывается" имелось в виду Assign(f, filename); Reset(f); (на будущее: нелишне приводить пример неработающего кода-- отвечающему придется меньше домысливать ;) ). В этом случае файл открывается в режиме 2(fmOpenReadWrite or fmShareCompat). Это поведение изменяется путем установки FileMode перед вызовом Reset.
FileMode := $40; (* fmOpenRead or fmShareDenyNone *)
Прим 1: Значение FileMode сбрасывается после Reset.
Прим 2: FileMode объявлена как var, а не threadvar, т.е. не потоко-безопасна.
Если предположение (1) неверно, и имелось в виду FileOpen()-- см. 2-й параметр.
Читать: Delphi Help на тему "FileMode variable", "file open mode constants", "FileOpen function", "TFileStream.Create", ...
--
wbr, sb
Необходимо открыть файл (впринципе нужен только для чтения), который постоянно обновляется, я так понимаю постоянно занятый другим приложением. Блокнотом открывается, а Делфями никак, пишет что неможет открыт файл.
Так вот, всезнающий All, подскажи как же мне это сделать.
Здравствуйте GeorgeT, Вы писали:
GT>Здравствуйте vav, Вы писали:
vav>>а можно сразу CreateFile
vav>>она не только создает...
GT>Лучше сразу API функцией CreateFile... Ничего лучше я пока не встречал
А чем твоя лучше моей ? (несчитая CreateFileA и CreateFileW)
Здравствуйте vav, Вы писали:
vav>Здравствуйте GeorgeT, Вы писали:
GT>>Здравствуйте vav, Вы писали:
vav>>>а можно сразу CreateFile
vav>>>она не только создает...
GT>>Лучше сразу API функцией CreateFile... Ничего лучше я пока не встречал
vav>А чем твоя лучше моей ? (несчитая CreateFileA и CreateFileW)
Может и не получиться если это файл открыт другим приложением с FILE_SHARE_READ... тогда ты вообще не сможешь открыть его на чтение
SB>Предположу(1), что под "открывается" имелось в виду Assign(f, filename); Reset(f); (на будущее: нелишне приводить пример неработающего кода-- отвечающему придется меньше домысливать ). В этом случае файл открывается в режиме 2(fmOpenReadWrite or fmShareCompat). Это поведение изменяется путем установки FileMode перед вызовом Reset.
procedure TMainForm.FileOpen1Execute(Sender: TObject);
var f: System.Text;
begin
if OpenDialog.Execute then
begin
CreateMDIChild(OpenDialog.FileName);
AssignFile (f, OpenDialog.FileName);
FileMode := $40;
Reset (f);
end;
end;
Не работает.
Если конкретнее, то необходимо открыть файл http.log, программы winroute.
Да не залипнет у вас Ctrl+Alt+Del
Re[3]: Немогу открыть текстовый файл
От:
Аноним
Дата:
13.03.02 18:33
Оценка:
Здравствуйте DeaDMan_77, Вы писали:
D7>procedure TMainForm.FileOpen1Execute(Sender: TObject); D7>var f: System.Text; D7>begin D7> if OpenDialog.Execute then D7> begin D7> CreateMDIChild(OpenDialog.FileName); D7> AssignFile (f, OpenDialog.FileName); D7> FileMode := $40; D7> Reset (f); D7> end; D7>end; D7>Не работает.
При Reset(t:System.Text) System.FileMode вообще не учитывается (d6,system.pas):
4028: OpenMode := GENERIC_READ; // open for read
4042: Temp := CreateFileA(t.Name, OpenMode, FILE_SHARE_READ, nil, Flags, FILE_ATTRIBUTE_NORMAL, 0);
D7>Если конкретнее, то необходимо открыть файл http.log, программы winroute.
Похоже на то, что он открыт монопольно... Его чем-то еще можно открыть?
D7>>procedure TMainForm.FileOpen1Execute(Sender: TObject); D7>>var f: System.Text; D7>>begin D7>> if OpenDialog.Execute then D7>> begin D7>> CreateMDIChild(OpenDialog.FileName); D7>> AssignFile (f, OpenDialog.FileName); D7>> FileMode := $40; D7>> Reset (f); D7>> end; D7>>end; D7>>Не работает.
А>При Reset(t:System.Text) System.FileMode вообще не учитывается (d6,system.pas): А>
А>4028: OpenMode := GENERIC_READ; // open for read
А>4042: Temp := CreateFileA(t.Name, OpenMode, FILE_SHARE_READ, nil, Flags, FILE_ATTRIBUTE_NORMAL, 0);
А>
D7>>Если конкретнее, то необходимо открыть файл http.log, программы winroute. А>Похоже на то, что он открыт монопольно... Его чем-то еще можно открыть?
Можно, темже блокнотом.
Если можно, кинте полный код, а то я что-то по ламерству своему непонял что к чему
С API никогда не работал.
Здравствуйте DeaDMan_77, Вы писали:
D7>Если можно, кинте полный код, а то я что-то по ламерству своему непонял что к чему :( D7>С API никогда не работал.
напиши CreateFile и нажми F1. Откроется соответствующая справка:
HANDLE CreateFile( LPCTSTR lpFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes DWORD dwCreationDistribution, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to file with attributes to copy );
с детальным описанием какой параметр для чего нужен.