![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скопировать файл
altatr © (2008-03-24 12:43:00)Как скопировать файл в делфе если он открыт в другом приложении.
Использовал вот такую команду:
CopyFile('C:\RO\1.dbf','C:\Plat\data\1.dbf',true);
Если файл открыт то команда неработает.
altatr (2008-03-24 14:47:00) [1]Вот так вот все поправил:
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;
файл копируется и открывается!
Спасибо!
Сергей М. (2008-03-24 14:38:00) [2]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:34:00) [3]я в винде могу сам этот файл куданибудь скопировать.
винда не ругается что файл занят другим процессом.
altatr (2008-03-24 14:32:00) [4]вот так?
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;
файл после такого копирования не открывается!
а если он в момент копирования занят то всеравно не копируется
Сергей М. (2008-03-24 14:26:00) [5]
> сама винда же копирует этот файл куда угодно
Это как ? Просто так вот по собственной инициативе взяла да скопировала, ни у кого не спрашивая разрешения ?)
Или тебе без разницы - что Винда что ее приложениеExplorer.exe ?)
altatr (2008-03-24 14:22:00) [6]и потом... сама винда же копирует этот файл куда угодно.
Сергей М. (2008-03-24 14:21:00) [7]Тогда CopyFile точно не подойдет.
Возможно подойдет TFileStream - он по кр.мере позволяет задавать опции открытия и доступа. Но не факт, что этот вариант даст 100%-й успех.
altatr (2008-03-24 14:16:00) [8]Занят тот файл который нужно скопировать в другую пустую директорию
Сергей М. (2008-03-24 13:30:00) [9]
> он, что, перед этим вешаться хотел?
Та самая другая программа, что открыла целевой файл, при этом залезла на табуретку и не ожидая подвоха меняет лампочку под потолком)
В этот момент altatr'овой программе эта табуретка шибко не понравилась и она решила заменить ее прямо сей секунд)
Семеныч (2008-03-24 13:27:00) [10]> altatr © (24.03.08 12:43)
Все определяется тем, с какими правами разделения доступа это "другое приложение" открыло файл. Если оно запретило другим приложениям доступ даже на чтение файла, то это, надо полагать, неспроста (то есть, оно этот файл как-то меняет и попытка его одновременного чтения может привести к ошибкам). Тогда самое правильное - не пытаться ему мешать.
DrPass (2008-03-24 13:27:00) [11]
> Как скопировать файл в делфе если он открыт в другом приложении.
...эээ, а уточни - открыт тот файл, который ты собрался копировать, или тот, поверх которого копируешь?
korneley (2008-03-24 13:21:00) [12]
> Как ты смотришь на ситуацию, когда у тебя из-под ногнеожиданно
> выбивают табуретку ?)
Эта... А он, что, перед этим вешаться хотел? :) Хотя, если копировать уже открытый файл базы...
Сергей М. (2008-03-24 12:52:00) [13]
> Если файл открыт то команда неработает
Представь себе, что оно сработало.
Как ты смотришь на ситуацию, когда у тебя из-под ног неожиданно выбивают табуретку ?)