Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Вниз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
(* Ïðè æåëàíèè ...
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);
(* Ïðè æåëàíèè ...
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c