powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как открывать заблокированый файл?
25 сообщений из 27, страница 1 из 2
Как открывать заблокированый файл?
    #40101280
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cannot open file "ххх.txt". Отказано в доступе.

В данном случае - файл открыт в FAR-е на просмотр.

Как обойти блокировку и открыть файл, который кто-то уже до тебя открыл?
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101281
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выставив флаги разрешения совместного доступа. Если, конечно, этот "кто-то" не
открыл его в эксклюзивном режиме.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101283
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Где выставив?

TFileStream.Create(FN,fmOpenReadWrite,fmShareDenyNone);

Не помогает.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101287
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Где?
Код: pascal
1.
hFile := CreateFile(..., FILE_SHARE_READ,...)
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101288
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще там в хелпе веселое:
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101289
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
rgreat
Где?
Код: pascal
1.
hFile := CreateFile(..., FILE_SHARE_READ,...)

Блин. Так и думал что придется через WinAPI делать. :(

Через crossplatform функции никак не сделать?
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101291
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
  TOwnedHandleStream = class(THandleStream)
  public
    destructor Destroy; override;
  end;

  TNamedHandleStream = class(TOwnedHandleStream)
  strict private
    FName: string;
  public
    constructor Create(AHandle: THandle; const AName: string);
  public
    property Name: string read FName;
  end;

  TCustomFileStream = class(TNamedHandleStream)
  public
    constructor Create(const AFileName: string; AAccess, AShareMode,
      ACreation: Cardinal; AFlagsAndAttributes: Cardinal = FILE_ATTRIBUTE_NORMAL;
      ASecAttr: PSecurityAttributes = nil; ATemplate: Cardinal = 0);
  end;

{ TOwnedHandleStream }

destructor TOwnedHandleStream.Destroy;
begin
  if FHandle <> 0 then
    CloseHandle(FHandle);
  inherited Destroy;
end;

{ TNamedHandleStream }

constructor TNamedHandleStream.Create(AHandle: THandle; const AName: string);
begin
  inherited Create(AHandle);
  FName := AName;
end;

{ TCustomFileStream }

constructor TCustomFileStream.Create(const AFileName: string; AAccess,
  AShareMode, ACreation, AFlagsAndAttributes: Cardinal;
  ASecAttr: PSecurityAttributes; ATemplate: Cardinal);
var
  LHandle: THandle;
begin
  LHandle := CreateFile(
    PChar(AFileName),
    AAccess,
    AShareMode,
    ASecAttr,
    ACreation,
    AFlagsAndAttributes,
    ATemplate
  );
  Win32Check(LHandle <> INVALID_HANDLE_VALUE);
  inherited Create(LHandle, AFileName);
end;

...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101295
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Где выставив?

TFileStream.Create(FN,fmOpenReadWrite,fmShareDenyNone);

Не помогает.


Типичная ошибка:
Код: pascal
1.
TFileStream.Create(FN, fmOpenReadWrite or fmShareDenyNone);



Третий параметр (Rights) - это совсем про другое, он для Линуксов всяких сделан.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101296
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
TFileStream.Create(FN, fmOpenReadWrite or fmShareDenyNone);

Раньше вроде для fmCreate игнорировались дополнительные флаги, но сейчас, я смотрю, это поправили
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101297
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, был такой баг во всяких Delphi 7.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101300
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Типичная ошибка:
Код: pascal
1.
TFileStream.Create(FN, fmOpenReadWrite or fmShareDenyNone);



Третий параметр (Rights) - это совсем про другое, он для Линуксов всяких сделан.

А блин, все время про это забываю, спасибо.

Только это проблемы не решает.

TFileStream.Create(FN,fmOpenReadWrite+fmShareDenyNone) - не открывает заблокированный файл а только разрешает его открывать другим.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101301
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
был такой баг во всяких Delphi 7.
Спорить не буду, но мне кажется что и в 2007 он был
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101302
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
TFileStream.Create(FN,fmOpenReadWrite+fmShareDenyNone) - не открывает заблокированный файл а только разрешает его открывать другим.
Ну если ты требуешь fmOpenReadWrite, то другие должны тебе дать права FILE_SHARE_READ or FILE_SHARE_WRITE
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101303
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл открытый FAR-ом на просмотр прекрасно открывается другим FAR-ом или даже NotePad-ом.

Но не через TextFile или TFileStream из дельфей.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101308
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Файл открытый FAR-ом на просмотр прекрасно открывается другим FAR-ом или даже NotePad-ом.

Но не через TextFile или TFileStream из дельфей.
Только что проверил
Код: pascal
1.
TFileStream.Create('D:\1', fmOpenReadWrite or  fmShareDenyNone);

Замечательно открывает
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101316
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

ЧЯДНТ?
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101342
O_O_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может помочь:
https://it-blackcat.blogspot.com/2020/03/the-process-cannot-access-the-file-because-it-is-being-used-by-another-process.html

Для Лазаруса придётся использовать THandleStream и прибивать хэндл вручную.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101348
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O_O_P,

Странно, но не помогло.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101349
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
ЧЯДНТ?
Гранаты версия делфи у тебя не той системы.

Зайди во внутрь TFileStream.Create до сюда
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function FileCreate(const FileName: string; Mode: LongWord; Rights: Integer): THandle;
{$IFDEF MSWINDOWS}
const
  Exclusive: array[0..1] of LongWord = (
    CREATE_ALWAYS,
    CREATE_NEW);
  ShareMode: array[0..4] of LongWord = (
    0,
    0,
    FILE_SHARE_READ,
    FILE_SHARE_WRITE,
    FILE_SHARE_READ or FILE_SHARE_WRITE);
begin
  Result := INVALID_HANDLE_VALUE;
  if (Mode and $F0) <= fmShareDenyNone then
    Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
      ShareMode[(Mode and $F0) shr 4], nil, Exclusive[(Mode and $0004) shr 2], FILE_ATTRIBUTE_NORMAL, 0);
end;
{$ENDIF MSWINDOWS}

и посмотри с какими параметрами вызывается CreateFile
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101375
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function FileOpenAsReadOnly(const sFileName: String): THandle;
begin
  Result := CreateFile(PChar(sFileName),
                       GENERIC_READ,
                       FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
                       nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if Result = INVALID_HANDLE_VALUE then begin
    raise Exception.Create(sFileName+': '+SysErrorMessage(GetLastError));
  end;
end;

       F:=TFileStream.Create(FileOpenAsReadOnly(FN));//,fmOpenReadWrite+FILE_SHARE_DELETE+fmShareDenyNone);

Так делал.

Может с правами что...

И IDE и FAR запускаются из под админа, через режим совместимости.
У FAR пробовал админские права забирать. Не помогло.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101395
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Глупый вопрос, а если Фар вообще закрыть, будет файл открываться?
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101403
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Да. Достаточно в FAR закрыть просмотр файла.
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101411
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Не верю!" (с)
Process Explorer показывает мне, что просмотрщик фара открывает файл с RWD
шарой. Так что бери в руки его, Process Monitor и смотри конкретно как и кем
открыт нужный файл и как конкретно твоя программа пытается его открыть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101436
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Да. Достаточно в FAR закрыть просмотр файла.
А нет ли у тебя в Фаре какого-нибудь левого плагина?
...
Рейтинг: 0 / 0
Как открывать заблокированый файл?
    #40101456
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Я бы все понял, но другой FAR и даже NotePad этот файл открывают!
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как открывать заблокированый файл?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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