powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Файлы
11 сообщений из 11, страница 1 из 1
Файлы
    #32122304
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно открыть файл, занятый другим приложением???
Ничего не получается. Доступ к файлу получить могу, но перепозиционировать указатель не получается...
Файл текстовый, ниже код для чтения файла. Подскажите как быть

fl:=FileOPen(<путь\файл>,fmOpenRead);
iFileLength := FileSeek(fl,0,2);
// Если файл занят, то размер -1 :(
st := PChar(AllocMem(iFileLength + 1));
ok:=FileSeek(fl,0,0);
iBytesRead := FileRead(fl, st^, iFileLength);
FileClose(fl);
for i := 0 to iBytesRead-1 do
memo1.Lines.Add(st );
FreeMem(st);
...
Рейтинг: 0 / 0
Файлы
    #32122316
NNN_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак
...
Рейтинг: 0 / 0
Файлы
    #32122345
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как-то же тот же Excel или Word может открыть занятый файл только для чтения
...
Рейтинг: 0 / 0
Файлы
    #32122383
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хочешь сказать, что этот занятый файл, к которому ты хочешь получить доступ открывается в Ворде???
...
Рейтинг: 0 / 0
Файлы
    #32122394
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает!
Удали лишнюю строчку for i := 0 to iBytesRead-1 do !

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TForm1.Button1Click(Sender: TObject);
var 
  Fl, iFileLength, iBytesReadб i: Integer;
  st: PChar;
begin
  fl:=FileOPen('c:\1.txt',fmOpenRead);
  iFileLength := FileSeek(fl, 0 , 2 );
  st := PChar(AllocMem( 10 ));
  FileSeek(fl, 0 , 0 );
// Читаем  10  букв 
  iBytesRead := FileRead(fl, st^,  10 );
  memo1.Lines.Add(st);
// Сдвигаемся и читаем еще  10  букв 
  FileSeek(fl, 100 , 0 );
  iBytesRead := FileRead(fl, st^,  10 );
  memo1.Lines.Add(st);
  FileClose(fl);
  FreeMem(st);
end;
...
Рейтинг: 0 / 0
Файлы
    #32122556
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну не хотелось бы так считывать, хотелось бы сразу весь файл...
...
Рейтинг: 0 / 0
Файлы
    #32122629
Aleksei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не уверен но попробуй так

F:TextFile;
S:String;
begin
AssignFile(F,'Путь/Имя файла');
Reset(F);//Открываем файл для чтения
While not eof(F) do //Пока не достигнут конец файла
begin
ReadLn(F,S);//прочтеная строка получается в S
end;
CloseFile(F);
end;
...
Рейтинг: 0 / 0
Файлы
    #32122636
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, ошибочка вышла. :)
Я проверял пример при открытом в Word'е, Notepad'e и еще в чем-то файле.
Все работало.
Но при открытом в Excel'e - ошибка!

Так работает, весь файл сразу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TForm1.Button1Click(Sender: TObject);
var
  iFileLength, i: Integer;
  st: PChar;
  FS: TFileStream;
begin
  Memo1.Clear;
  FS:= TFileStream.Create('c:\1.txt', fmShareDenyNone);
  iFileLength := FS.Size;
  st := PChar(AllocMem(iFileLength+ 1 ));
  FS.Read(st^, iFileLength);
  FS.Free;
  Memo1.Lines.Add(st);
  FreeMem(st);
end;
...
Рейтинг: 0 / 0
Файлы
    #32123312
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Assing не срабатывает, а вариант oleg_e, попробую. Всем спасибо:)
...
Рейтинг: 0 / 0
Файлы
    #32123314
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТОчно!!!! Спасибо, все получилось:)
...
Рейтинг: 0 / 0
Файлы
    #32123469
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:-)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Файлы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]