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

Вниз

Копирование файлов по списку   Найти похожие ветки 

 
Steep ©   (2006-09-12 08:19) [0]

Можете привести код копирования файлов по списку List или из файла (я думаю что в принципе это одно и тоже)
Желательно в отдельном потоке или методом windows

Рассматривал различные примеры, но там либо копирование 1 файла или копирование папки


 
Steep ©   (2006-09-12 08:21) [1]

Заранее спасибо за ответы!


 
MBo ©   (2006-09-12 08:21) [2]

в FAQ, искать ShFileOperation


 
Steep ©   (2006-09-12 08:26) [3]

в FAQ токо копирование папки с подкаталогами и удаление в корзину :(


 
MBo ©   (2006-09-12 08:33) [4]

Там примеры использования, а описание функции и SHFILEOPSTRUCT смотри в MSDN, обратив внимание на pFrom и pTo

кроме того, раз ты знаешь, как копировать один файл, ничего не мешает сделать это в цикле для множества имен файлов.


 
Steep ©   (2006-09-13 07:45) [5]

Вобщем копирование из файла по списку я замутил..! :)
 Осталось 2 проблемы
1. мне нужно чтобы если копируется больше указанного размера, то копирование прекращалось.
2. В зависимости от выбранного типа действия: либо копировалось, либо перемещалось, либо удалялось
{как я понял FO_COPY достаточно заменить на FO_MOVE, FO_DELETE
примерный код такой
---~Начало~----
var
i : integer;
s : TStringList;
Fo:TSHFileOpStruct;
buffer: array[0..4096] of char;
p:pChar;
Begin
s.TStringList.Create;
s.LoadFromFile(ExtractFilePath(application.ExeName)+"files.txt");
FillChar(Buffer, size of (Buffer), #0);
p:=@buffer;
for i:=0 to s.count-1 do p:=StrECopy(p, PChar(s.strings[i]))+1;
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd:=handle;
///Пробный код с кейсом
case ComboBox.item of (не помню точно, короче выбранный)
0: Fo.wFunc:=FO_COPY //Копирование;
1: Fo.wFunc:=FO_MOVE //Перемещение;
2: Fo.wFunc:=FO_DELETE //Удаление;
end;
//конец
Fo.pFrom:=@buffer;
Fo.pFo:=pChar(editPath.text);
Fo.tFlags:=0;
if ((SHFileOperations(Fo)<>0) or (Fo.AnyOperationsAborted<>false)) then Showmessage("Aborted");//кстати почему если убираешь эту строку, то не работает?
---~Конеч~----
Но когда я делаю с кейсом вылазит ошибка(причем уже в компилянной проге..) Без кейса все нормально работает..}


 
Думкин ©   (2006-09-13 07:53) [6]

> case ComboBox.item of (не помню точно, короче выбранный)

Так и весь код по памяти? В том что написано - ошибка, почему ее не может быть и в другом?


 
Steep ©   (2006-09-13 08:01) [7]

остальное я переписал :) {на букмажку :) }
Просто остальной код с рабочей проги, которая токо копирует.


 
Steep ©   (2006-09-13 09:36) [8]

Просто писать отдельно весь код на каждое действие не есть хороше или все-же придется?


 
Amoeba ©   (2006-09-13 13:02) [9]

Хорошую статью (на русском) об использовании ShFileOperation найдешь на http://www.delphikingdom.com


 
Steep ©   (2006-09-14 08:04) [10]

вроде разобрался там списке были файлы, которые были удалены, только как проверить есть ли файл?
И всеже остаеться вопрос:

> 1. мне нужно чтобы если копируется больше указанного размера,
>  то копирование прекращалось.


 
Думкин ©   (2006-09-14 08:09) [11]

> Steep ©   (14.09.06 08:04) [10]


> MBo ©   (12.09.06 08:33) [4]
> кроме того, раз ты знаешь, как копировать один файл, ничего
> не мешает сделать это в цикле для множества имен файлов
.
>


 
Elen ©   (2006-09-14 08:13) [12]


> > 1. мне нужно чтобы если копируется больше указанного размера,
> >  то копирование прекращалось.

Ты что хочеш определять размер во время копирования? Ты работаеш для локалки? Это что - у тебя с трафиком проблемы что-ли?


 
Steep ©   (2006-09-14 08:28) [13]


> Ты что хочеш определять размер во время копирования? Ты
> работаеш для локалки? Это что - у тебя с трафиком проблемы
> что-ли?

нет я хочу копировать песни, допустим на диск ставлю 700 мб
или флешка 256 мб, тогда на 256 и т.д.
> Думкин ©


Копирование в цикле я сделал:

> for i:=0 to s.count-1 do p:=StrECopy(p, PChar(s.strings[i]))+1;


 
Elen ©   (2006-09-14 08:38) [14]


> Steep ©

Ты на компакт режеш или с него? Чем коммандер не устраивает? И причем тут большие размеры?


 
Steep ©   (2006-09-14 08:45) [15]


> Ты на компакт режеш или с него?

Может да а может просто другу дописать 100 мб на компашку или на винт пару гигов кинуть и тд.

> Чем коммандер не устраивает?

Хочу написать свою прогу! ИМХО свое ближе к телу :)

> И причем тут большие размеры?

Объяняю суть проги есть плейлист, я делаю из него список файлов и в зависимости от желания и потребностей совершаю какие-либо действия над этими музыкальными файлами (или клипаками, фильмами!)


 
Elen ©   (2006-09-14 08:50) [16]


>  как проверить есть ли файл?

If FileExist(имя файла) then он есть.
А если он есть до копирования применяй GetFileSize или FindFirst - это даст тебе размер и определяй копить тебе яго али не...


 
Steep ©   (2006-09-14 08:52) [17]

Большое Спасибо!!!
Я это и искал!


 
Elen ©   (2006-09-14 08:59) [18]


> Steep ©

Ты лучше пастарайся написать такой плагин к WinAmp... Это будет клас... :-)


 
Думкин ©   (2006-09-14 09:00) [19]

> Steep ©   (14.09.06 08:28) [13]

ТО есть вы считаете, что копирование происходит в этот момент?


 
Steep ©   (2006-09-14 09:09) [20]


> ТО есть вы считаете, что копирование происходит в этот момент?

нет идет забивание списка файлов буфер
По мне это наверное лучше

> Ты лучше пастарайся написать такой плагин к WinAmp... Это
> будет клас... :-)

Еслиб я знал как, тогда да...
А пока я даж делфи нормально не знаю...

Еще последний вопросик, а можно это (копирование) загнать в отдельный поток, чтоб форма продолжала отвечать на команды?


 
Elen ©   (2006-09-14 09:12) [21]


> Steep ©

Кажись CreateRemoteThread... В общем порули в эту степь по SDK


 
Steep ©   (2006-09-14 09:17) [22]


> порули в эту степь по SDK

??? это как..
Я просто самоучка вот нормально ничего и не знаю...
Ксатати MSDN смотреть на сайте Microsodt"a?


 
Elen ©   (2006-09-14 09:31) [23]


> Steep ©

[Delphi]\Common Files\Borland Shared\MSHelp\WIN32SDK.HLP Там API.
Эта справка кстати должна быть интегрирована в Хелп Делфи...
Ну можеш и MSDN.


 
Steep ©   (2006-09-14 09:35) [24]

Потом может и плагин для Вампа создам! С вашей помощью ;)
Спасибо всем!


 
Думкин ©   (2006-09-14 09:48) [25]

> Steep ©   (14.09.06 09:35) [24]

Если уж про потоки, то сюда для начала:
"..\Program Files\Borland\Delphi7\Demos\Threads"



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.012 c
10-1123870709
mufan
2005-08-12 22:18
2006.10.01
Отчет в Word


15-1157874177
Сергуня
2006-09-10 11:42
2006.10.01
Так к слову


15-1158086887
1519
2006-09-12 22:48
2006.10.01
Меню пуск


2-1157920671
Ivanov
2006-09-11 00:37
2006.10.01
Проблема с dll


15-1157997353
Nic
2006-09-11 21:55
2006.10.01
Visual Studio





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