Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Сегодня :

День славянской письменности и культуры


как грамотно скопировать файл
На страницу 1, 2  След.

Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Brain
Гость







СообщениеВс, 21-Июл-2002 15:49    Заголовок сообщения: как грамотно скопировать файл
Цитата

я задолбался не могу файл скопировать если не сложно подскажите простенький метод (filecopy не пашет) дельфа четвёртая
В начало
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВс, 21-Июл-2002 18:29 
Цитата

Где ты там нашел функцию filecopy? Есть виндовая CopyFile, и есть дельфовая CopyFileTo (которая, впрочем, просто вызывает виндовую, только удобнее в работе). Может не пахать в двух случаях - когда файл открыт другой программой и когда он копирует в то место, где уже есть такой файл (а может, ты просто неправильно указал имя?).
Если файл открыт другой прогой, то можно скопировать вручную: сначала устанавливаешь режим "открывать только для чтения" FileMode:=2;, а потом классически копируешь файл через память по кускам фукнциями assignfile/reset/blockread/blockwrite/closefile

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Mon@rchP
Гость







СообщениеВт, 30-Июл-2002 11:33 
Цитата

хай ол...
короче копирую файло так... :

procedure TForm1.Button3Click(Sender: TObject);
var
OpStruc: TSHFileOpStruct;
frombuf, tobuf: Array [0..128] of Char;
begin
FillChar( frombuf, Sizeof(frombuf), 0 );
FillChar( tobuf, Sizeof(tobuf), 0 );
StrPCopy( frombuf, Edit2.Text + '*.doc' );
StrPCopy( tobuf, WinDir + 'Temp\Docs' );
with OpStruc do
begin
Wnd:= Handle;
wFunc := FO_COPY;
pFrom := @frombuf;
pTo := @tobuf;
fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := Nil;
lpszProgressTitle := Nil;
end;
ShFileOperation( OpStruc );
end;

в итоге всё ништяк копируется....

проблема: при повторном копировании существующие файлы не замещаются, а появляются "Копия *.doc" ....
как от этого избавиться.... ???????
В начало
Slonenok
Гость







СообщениеВт, 30-Июл-2002 11:54 
Цитата

есть виндовая функция COPYFILE :)

function CopyFile(pchar(существующие имя файла),pchar(имя нового
файла),признак замены существующего файла):boolean;

признак = false - заменить,
признак = true - оставить старый файл

если вернет false - то операция не удалась, точный код результата -
через вызов GetLastError.

Злобный
В начало
Mon@rchP
Гость







СообщениеВт, 30-Июл-2002 18:37 
Цитата

нада попробовать, но заранее спасиб....
ещё мнения есть....?
В начало
Пол:Муж 13-ый
Администратор


Возраст: 36
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеВт, 30-Июл-2002 18:48 
Цитата

можно ещё кучу способов, в частности - поискать описание юзаемой тобой, наверняка там есть какие-нибудь параметры....но нафига Wink
_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mon@rchP
Гость







СообщениеВт, 30-Июл-2002 19:06 
Цитата

ну как нафига....? Wink
шоб не добавлялись "Копия *.doc" ... . ! Счастлив
В начало
Пол:Муж 13-ый
Администратор


Возраст: 36
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеВт, 30-Июл-2002 21:33 
Цитата

ну что ты прицепился к тому методу, юзай copyfile :)

или копируй средствами дельфи, открыл оба файла как потоки и перелил один в другой, всего лишь одной командой.

_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mon@rchP
Гость







СообщениеВт, 30-Июл-2002 23:32 
Цитата

если бы нужно было один файл скопировать с места на место, то да .... без проблем.... а мне нуна копирование по маске.... например *.doc .... вот и....
так на чём остановимся....? Рева
В начало
Пол:Муж 13-ый
Администратор


Возраст: 36
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеВт, 30-Июл-2002 23:48 
Цитата

3-й раз грю - копифайл! и вообще дело хозяйское.
_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mon@rchP
Гость







СообщениеСр, 31-Июл-2002 2:13 
Цитата

блин...
короче , делаю так:
CopyFile(PChar(Edit2.Text + 'Work.doc'),PChar(WinDir + 'Temp\Docs\'+ 'Work.doc'),false);
всё прекрасно пашет....
а стоит как я говорил задать маску, так обломс....
CopyFile(PChar(Edit2.Text + '*.doc'),PChar(WinDir + 'Temp\Docs\'+ '*.doc'),false);
как быть с этой фигнёй..... ???
зы.... пока не удаляйте топик.... Wink
В начало
Пол:Муж 13-ый
Администратор


Возраст: 36
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеСр, 31-Июл-2002 2:19 
Цитата

CopyFile работает ток с 1 файлом.


достал как говорится, ну что вы все такие ленивые :)



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

вот, измени флаги операции, ты там сам указал - переименовать.

Вот значения флагов:

FOF_ALLOWUNDO - сохраняет информацию о возможной отмене операции;
FOF_FILESONLY - выполняет операцию только для файлов, если задана маска файлов;
FOF_MULTIDESTFILES - указывает, что чтo описывает несколько файлов (по одному на каждый файл источника) вместо одного каталога, куда должны быть помещены исходные файлы;
FOF_NOCONFIRMATION - отвечает "да для всех" на все вопросы;
FOF_NOCONFIRMMKDIR - не требует подтверждения создания нового каталога;
FOF_RENAMEONCOLLISION - присваивает файлу новое имя при операциях копирования, перемещения или переименования, если файл с указанным именем уже существует;
FOF_SILENT - не показывает окно прогресса;
FOF_SIMPLEPROGRESS - отображает окно прогресса, но не показывает имен файлов;
lpszProgressTitle - указатель на строку заголовка для окна прогресса; используетсЯ только, если среди флагов есть FOF_SIMPLEPROGRESS.


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

_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mon@rchP
Гость







СообщениеСр, 31-Июл-2002 2:43 
Цитата

млин.... как всё просто оказалось.... нужно было тока FOF_RENAMEONCOLLISION убрать.... LOL
ништяк....
ещё вопросик.... :)
при попытке копирования файла с дискеты при отсутствии таковой в дисководе - происходит обращение к дисководу и выдаётся сообщение что диск в устройстве отсутсвует..... как этого избежать.... всякие эти диалоговые окошки не нужны вовсе.... Злобный
В начало
Пол:Муж 13-ый
Администратор


Возраст: 36
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеСр, 31-Июл-2002 22:40 
Цитата

сначало проверить
http://www.chertenok.wallst.ru/faq/faq.phtml?tema=hard&action=show&id=9

а потом копировать

_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mon@rchP
Гость







СообщениеЧт, 01-Авг-2002 8:27 
Цитата

а чё если заюзать:
type TDriveState(DS_NO_DISK,DS_UNFORMATTED_DISK,DS_EMPTY_DISK, DS_DISK_WITH_FILES); ??? :P
В начало
Показать сообщения:   
Страница 1 из 2 На страницу 1, 2  След.
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100