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

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Где ты там нашел функцию filecopy? Есть виндовая CopyFile, и есть дельфовая CopyFileTo (которая, впрочем, просто вызывает виндовую, только удобнее в работе). Может не пахать в двух случаях - когда файл открыт другой программой и когда он копирует в то место, где уже есть такой файл (а может, ты просто неправильно указал имя?).
Если файл открыт другой прогой, то можно скопировать вручную: сначала устанавливаешь режим "открывать только для чтения" FileMode:=2;, а потом классически копируешь файл через память по кускам фукнциями assignfile/reset/blockread/blockwrite/closefile _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
хай ол...
короче копирую файло так... :
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" ....
как от этого избавиться.... ??????? |
|
| В начало |
|
 |
|
|
|
Цитата |
|
есть виндовая функция COPYFILE
function CopyFile(pchar(существующие имя файла),pchar(имя нового
файла),признак замены существующего файла):boolean;
признак = false - заменить,
признак = true - оставить старый файл
если вернет false - то операция не удалась, точный код результата -
через вызов GetLastError.
 |
|
| В начало |
|
 |
|
|
|
Цитата |
|
нада попробовать, но заранее спасиб....
ещё мнения есть....? |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
|
|
|
Цитата |
|
ну как нафига....?
шоб не добавлялись "Копия *.doc" ... . !  |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
|
Цитата |
|
ну что ты прицепился к тому методу, юзай copyfile
или копируй средствами дельфи, открыл оба файла как потоки и перелил один в другой, всего лишь одной командой. _________________
http://fotki.yandex.ru/users/vladimir13
С уважением, 13-ый  |
|
| В начало |
|
 |
|
|
|
Цитата |
|
если бы нужно было один файл скопировать с места на место, то да .... без проблем.... а мне нуна копирование по маске.... например *.doc .... вот и....
так на чём остановимся....?  |
|
| В начало |
|
 |
|
|
 |
 13-ый
Администратор

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

Возраст: 36
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
|
Цитата |
|
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-ый  |
|
| В начало |
|
 |
|
|
|
Цитата |
|
млин.... как всё просто оказалось.... нужно было тока FOF_RENAMEONCOLLISION убрать....
ништяк....
ещё вопросик....
при попытке копирования файла с дискеты при отсутствии таковой в дисководе - происходит обращение к дисководу и выдаётся сообщение что диск в устройстве отсутсвует..... как этого избежать.... всякие эти диалоговые окошки не нужны вовсе....  |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 36
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
|
|
|
Цитата |
|
а чё если заюзать:
type TDriveState(DS_NO_DISK,DS_UNFORMATTED_DISK,DS_EMPTY_DISK, DS_DISK_WITH_FILES); ???  |
|
| В начало |
|
 |
|