Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
     (* &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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.047 c
14-1082224757
Adil
2004-04-17 21:59
2004.05.16
Предложение


1-1083011006
MadSliMX
2004-04-27 00:23
2004.05.16
RxRichEdit. Глюки с кодировкой.


9-1072859108
Elf
2003-12-31 11:25
2004.05.16
вопрос от чайника


14-1082631519
Igorek
2004-04-22 14:58
2004.05.16
Задача (физика)


1-1083301978
ivc_andr
2004-04-30 09:12
2004.05.16
сканировать сеть





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский