Главная страница
    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.045 c
2-1206090533
Dima
2008-03-21 12:08
2008.04.20
Что за бред происходит???


2-1206435144
lead-in
2008-03-25 11:52
2008.04.20
количество процессов


2-1206038360
Nicky000
2008-03-20 21:39
2008.04.20
SQL


15-1205047618
SerJaNT
2008-03-09 10:26
2008.04.20
Embedding Windows Media Player


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





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