Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
2-1206287987
AndrewG
2008-03-23 18:59
2008.04.20
S M A RT A P I


2-1206273219
Бегущий человек
2008-03-23 14:53
2008.04.20
Как заюзать функцию из С-файла в проекте Delphi?


15-1204604949
Slider007
2008-03-04 07:29
2008.04.20
С днем рождения ! 4 марта 2008 вторник


3-1194067877
Sirus
2007-11-03 08:31
2008.04.20
Отслеживание изменений в базе


2-1206546070
kernel
2008-03-26 18:41
2008.04.20
WM_PAINT чужого приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский