Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Reset(Vf1, 1) пишет acces denied на ресурсе read-only   Найти похожие ветки 

 
Виктор ©   (2004-04-30 16:55) [0]

Приветствую всех.
Почему низкоуровневой командой Reset(Vf1, 1) не могу открыть файл с сетевого ресурса который read-only.
А кусок кода такой:
   try
     AssignFile(Vf1, EditPathFileFrom.Text+ProgramName+".exe");
     Reset(Vf1, 1);
     AssignFile(Vf2, EditPathFileTo.Text+ProgramName+".exe");
     Rewrite(Vf2, 1);
     Size := FileSize( Vf1);
     repeat
        BlockRead(Vf1, Buf, SizeOf(Buf), NRead);
        BlockWrite(Vf2, Buf, NRead, NWrite);
        UpdateProgress.Percent := floor(FileSize(  Vf2)/size*100);
     until (NRead = 0) or (NWrite <> NRead);

Хотя есть такая необходимость.


 
Anatoly Podgoretsky ©   (2004-04-30 16:59) [1]

Потому что ты пытаешься открыть в режиме чтения/записи


 
Виктор ©   (2004-04-30 17:02) [2]

Почему  в режиме чтения/записи,
Reset открывает только на чтение или я не прав?


 
Anatoly Podgoretsky ©   (2004-04-30 17:04) [3]

Не прав


 
PVOzerski ©   (2004-04-30 17:06) [4]

см. F1 FileMode.


 
Виктор ©   (2004-04-30 17:09) [5]

Я в шоке..................
Хорошо, мне что без  FileOpen("",{fmOpenRead,fmShareCompat,fmShareDenyNone}) не обойтись ? или как?


 
Fay ©   (2004-04-30 17:12) [6]

А зачем обходиться?


 
WebErr ©   (2004-04-30 17:14) [7]

В общем сохраняй всё при чтении и записывай при записи всё, что сохранил.


 
Виктор ©   (2004-04-30 17:15) [8]

Потому что мне нужно по-кусочно скопировать файл из одного
места в другое и отобразить этот процесс на ProgressBar.
А более простого способа я не нашел. Может кто подскажет?


 
pasha_golub ©   (2004-04-30 17:16) [9]

Виктор ©   (30.04.04 17:15) [8]
SHFileOperation


 
Fay ©   (2004-04-30 17:19) [10]

CreateFile, ReadFile и WriteFile ничем не сложнее.
Тот же (почти) код, только "другими словами".


 
Виктор ©   (2004-04-30 17:33) [11]

Может примером ощасливите, а то сплошное рукоблудие с ошибками получается.


 
WebErr ©   (2004-04-30 17:36) [12]

Memo1.LoadFromFile/SaveToFile подойдёт?


 
Виктор ©   (2004-04-30 17:39) [13]

WebErr ©   (30.04.04 17:36) [12]
Нет, смотри [8] и файл EXE.


 
Fay ©   (2004-04-30 17:48) [14]

Что-нибудь типа этого
procedure TForm1.Button1Click(Sender: TObject);
const
 BSZ = 4096;
var
 fr, fw : THandle;
 fnr, fnw : String;
 nr, nw : Cardinal;
 b : array [0..BSZ-1] of Byte;
begin
 fnr := "c:\boot.ini";
 fnw := "c:\boot.fuck";
 fr := CreateFIle(PChar(fnr), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 if fr = INVALID_HANDLE_VALUE then
   begin
     (* &Iuml;&eth;&egrave; &aelig;&aring;&euml;&agrave;&iacute;&egrave;&egrave; ...
     case GetLastError of
     ........
     end;
     (**)
     Application.MessageBox("!!!", "", MB_OK or MB_ICONERROR);
     Exit;
   end;
 fw := CreateFile(PChar(fnw), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
   if fw = INVALID_HANDLE_VALUE then
   begin
     CloseHandle(fr);
     (* &Iuml;&eth;&egrave; &aelig;&aring;&euml;&agrave;&iacute;&egrave;&egrave; ...
     case GetLastError of
     ........
     end;
     (**)
     Application.MessageBox("!!!", "", MB_OK or MB_ICONERROR);
     Exit;
   end;
   try
   ReadFile(fr, b, BSZ, nr, nil);
   if nw > 0 then repeat
     WriteFIle(fw, b, nr, nw, nil);
     ReadFile(fr, b, BSZ, nr, nil);
   until nr = 0;
   finally
    CloseHandle(fr);
    CloseHandle(fw);
   end;
end;


 
Fay ©   (2004-04-30 17:49) [15]

Глаголицей - это "При желании" 8)


 
WebErr ©   (2004-04-30 17:57) [16]

А прогресс бар зачем... такой большой файл?
Ну ладно, тогда в цикле
1) открываете файл для чтения
2) сохраняете считанную инфу в буффер,
3) закройте файл
4) откройте файл для записи
5) сохраните буффер в файл
6) закройте файл
7) измените ProgressBar
Всё.


 
Fay ©   (2004-04-30 18:00) [17]

2WebErr ©   (30.04.04 17:57) [16]
Вы долго над этим думали? Решение идиотское, даже если я один здесь так думаю (что маловероятно).


 
Виктор ©   (2004-04-30 18:02) [18]

Спасибо за помошь Вы настоящие друзья,
а то у меня уже глаза на лоб вылазят.


 
WebErr ©   (2004-04-30 18:05) [19]


> Fay ©   (30.04.04 18:00) [17]

Нет, я не думаю - это вредно!
Конечно не надо открывать файл в цикле!
А долго потому, что девушка позвонила мне на работу и я с ней "поболтал"... ;)


 
Fay ©   (2004-04-30 18:08) [20]

2WebErr ©   (30.04.04 18:05) [19]
Ясно. А то уменя чуть не пропала уверенность в будущем человечества. 8)


 
WebErr ©   (2004-04-30 18:11) [21]


> Fay ©   (30.04.04 18:08) [20]

Во мне? ;)


 
Fay ©   (2004-04-30 18:15) [22]

В частности 8)


 
Gero ©   (2004-04-30 18:26) [23]

Если хочется именно Reset"ом, то можно снять ReadOnly с файла перед копированием, а потом снова поставить.


 
Fay ©   (2004-04-30 18:33) [24]

2Gero ©   (30.04.04 18:26) [23]
Это было бы очень странное решение 8)


 
Gero ©   (2004-04-30 18:36) [25]


> Это было бы очень странное решение 8)

Причем далеко не лучшее. Но решение.


 
Fay ©   (2004-04-30 18:39) [26]

К примеру, на смену атрибута может правей не хватить.


 
Fay ©   (2004-04-30 18:42) [27]

Или окажется, что файл не read only, а доступ, действительно, только на чтение.


 
PVOzerski ©   (2004-04-30 19:09) [28]

Так FileMode:=0 всё-таки попробовали?


 
Fay ©   (2004-04-30 19:15) [29]

2PVOzerski ©   (30.04.04 19:09) [28]
Нафиг? fmOpenReadWrite  = $0002


 
Anatoly Podgoretsky ©   (2004-04-30 19:56) [30]

CopyFileEx


 
Fay ©   (2004-04-30 20:38) [31]

Дейтвительно. CopyFileEx, пожалуй, лучшее решение.



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.721 c
1-1083688521
Влад Сташневский
2004-05-04 20:35
2004.05.16
Узнать адрес в программе вызова процедуры


1-1082651546
Vitalnet
2004-04-22 20:32
2004.05.16
Увидеть весь тект в выподающем меню


1-1083271717
killer
2004-04-30 00:48
2004.05.16
ImageList и BitBtn.Glyph


1-1083243833
Mikle
2004-04-29 17:03
2004.05.16
FastReport и редактирование готовых отчетов


7-1081317970
Borealis
2004-04-07 10:06
2004.05.16
Сервис RunAs