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

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

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

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

TFileStream.Create(FN,fmOpenReadWrite,fmShareDenyNone);

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

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

Через crossplatform функции никак не сделать?
...
Рейтинг: 0 / 0
01.10.2021, 12:55
    #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
01.10.2021, 13:04
    #40101295
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как открывать заблокированый файл?
rgreat
Где выставив?

TFileStream.Create(FN,fmOpenReadWrite,fmShareDenyNone);

Не помогает.


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



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

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



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

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

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

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

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

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

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

ЧЯДНТ?
...
Рейтинг: 0 / 0
01.10.2021, 14:27
    #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
01.10.2021, 14:41
    #40101348
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как открывать заблокированый файл?
O_O_P,

Странно, но не помогло.
...
Рейтинг: 0 / 0
01.10.2021, 14:45
    #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
01.10.2021, 15:50
    #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
01.10.2021, 17:32
    #40101395
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как открывать заблокированый файл?
rgreat,

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

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

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


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