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

Вниз

Скопировать файл   Найти похожие ветки 

 
altatr ©   (2008-03-24 12:43) [0]

Как скопировать файл в делфе если он открыт в другом приложении.
Использовал вот такую команду:

CopyFile("C:\RO\1.dbf","C:\Plat\data\1.dbf",true);

Если файл открыт то команда неработает.


 
Сергей М. ©   (2008-03-24 12:52) [1]


> Если файл открыт то команда неработает


Представь себе, что оно сработало.
Как ты смотришь на ситуацию, когда у тебя из-под ног неожиданно выбивают табуретку ?)


 
korneley ©   (2008-03-24 13:21) [2]


> Как ты смотришь на ситуацию, когда у тебя из-под ног неожиданно
> выбивают табуретку ?)
Эта... А он, что, перед этим вешаться хотел? :) Хотя, если копировать уже открытый файл базы...


 
Семеныч   (2008-03-24 13:27) [3]

> altatr ©   (24.03.08 12:43)

Все определяется тем, с какими правами разделения доступа это "другое приложение" открыло файл. Если оно запретило другим приложениям доступ даже на чтение файла, то это, надо полагать, неспроста (то есть, оно этот файл как-то меняет и попытка его одновременного чтения может привести к ошибкам). Тогда самое правильное - не пытаться ему мешать.


 
DrPass ©   (2008-03-24 13:27) [4]


> Как скопировать файл в делфе если он открыт в другом приложении.

...эээ, а уточни - открыт тот файл, который ты собрался копировать, или тот, поверх которого копируешь?


 
Сергей М. ©   (2008-03-24 13:30) [5]


> он, что, перед этим вешаться хотел?


Та самая другая программа, что открыла целевой файл, при этом залезла на табуретку и не ожидая подвоха меняет лампочку под потолком)

В этот момент altatr"овой программе эта табуретка шибко не понравилась и она решила заменить ее прямо сей секунд)


 
altatr ©   (2008-03-24 14:16) [6]

Занят тот файл который нужно скопировать в другую пустую директорию


 
Сергей М. ©   (2008-03-24 14:21) [7]

Тогда CopyFile точно не подойдет.
Возможно подойдет TFileStream - он по кр.мере позволяет задавать опции открытия и доступа. Но не факт, что этот вариант даст 100%-й успех.


 
altatr ©   (2008-03-24 14:22) [8]

и потом... сама винда же копирует этот файл куда угодно.


 
Сергей М. ©   (2008-03-24 14:26) [9]


> сама винда же копирует этот файл куда угодно


Это как ? Просто так вот по собственной инициативе взяла да скопировала, ни у кого не спрашивая разрешения ?)

Или тебе без разницы - что Винда что ее приложение Explorer.exe ?)


 
altatr ©   (2008-03-24 14:32) [10]

вот так?

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
FS:TFileStream;
ES:TFileStream;
begin
fs:=Tfilestream.Create("C:\RO\1.dbf", fmOpenRead);
ES:=TFileStream.Create("C:\Plat\data\1.dbf", fmCreate);
fs.Position:=0;
es.Write(fs, fs.Size);
es.Free;
fs.Free;
end;

файл после такого копирования не открывается!
а если он в момент копирования занят то всеравно не копируется


 
altatr ©   (2008-03-24 14:34) [11]

я в винде могу сам этот файл куданибудь скопировать.
винда не ругается что файл занят другим процессом.


 
Сергей М. ©   (2008-03-24 14:38) [12]

fs:=Tfilestream.Create("C:\RO\1.dbf", fmOpenRead or fmShareDenyNone);


> fs.Position:=0;


Это лишнее.


> es.Write(fs, fs.Size);


Это в корне неверно.

Стримы копируются вызовом метода CopyFrom, вот так:

ES.CopyFrom(FS, FS.Size);


 
altatr ©   (2008-03-24 14:47) [13]

Вот так вот все поправил:

procedure TForm1.BitBtn3Click(Sender: TObject);
Var
FS:TFileStream;
ES:TFileStream;
begin
fs:=Tfilestream.Create("C:\RO\1.dbf",  fmOpenRead or fmShareDenyNone);
ES:=TFileStream.Create("C:\Plat\data\1.dbf", fmCreate);
es.CopyFrom(fs, fs.Size);
es.Free;
fs.Free;
end;

файл копируется и открывается!
Спасибо!



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
15-1204884874
matt
2008-03-07 13:14
2008.04.20
Exception Conference #07


15-1204611655
oldman
2008-03-04 09:20
2008.04.20
Перенос системы (МЕ) и ПО


2-1206367188
webSQLNeederr
2008-03-24 16:59
2008.04.20
Алгоритм удаления повторяющихся строк в TStringList


2-1206211049
Viktor
2008-03-22 21:37
2008.04.20
Как создать отчёт из 2-х таблиц в Quick Reports?


2-1206351890
operator
2008-03-24 12:44
2008.04.20
Оптимальный способ парсинга строк.