Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование папок с вложениями, Отображение процесса копирования 
:(
    Опции темы
kefir01
Дата 3.2.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Хм, наверное я плохо задал вопрос, суда по нулевому числу ответов... smile 

Уточню... Есть в общем-то стандартный код копирования
Код

void __fastcall fCopy(AnsiString From, AnsiString To)
{
SHFILEOPSTRUCT sh;
sh.hwnd=Form1->Handle;
sh.wFunc = FO_COPY;
sh.pFrom = From.c_str();
sh.pTo = To.c_str();
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;
SHFileOperation (&sh);
}

Так вот как правильно через него организовать пофайловое копирование в следующем цикле
Код

__fastcall ScanDir(TMemo *memo, AnsiString s, TProgressBar *pbar, TEdit *edit, bool doCopy=false)
{
int c = 1;
    TSearchRec sr;
    if(!FindFirst(IncludeTrailingPathDelimiter(s) + "*.*", faAnyFile, sr)) {
      do {
...

        AnsiString pfrom = s + "\\" + sr.Name + "\0";
        AnsiString pto = edit->Text + "\\" + sr.Name;
        fCopy(pfrom,pto);

...
        }
      }
      while(!FindNext(sr));


Соответственно как сделать так, чтобы копировался отдельно каждый файл,дабы можно было отобразить ход копирования.
Заранее спасибо!

Это сообщение отредактировал(а) kefir01 - 4.2.2008, 08:58
PM MAIL   Вверх
kefir01
Дата 4.2.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Исправил вопрос ;)
PM MAIL   Вверх
PPS05
Дата 4.2.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Если я правильно понял, то надо убрать флаг FOF_SILENT.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
kefir01
Дата 4.2.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Нет, к сожалению, встроенный виндовый ход меня не интересует. Нужно TProgressBar сделать. Я даже знаю как. Проблема в том, чтобы устроить пофайловое копирование с сохранением путей.

Полагаю косяк тут переменных pto и pfrom
Код

        AnsiString pfrom = s + "\\" + sr.Name + "\0";
        AnsiString pto = edit->Text + "\\" + sr.Name;
        fCopy(pfrom,pto);


Это сообщение отредактировал(а) kefir01 - 4.2.2008, 12:52
PM MAIL   Вверх
PPS05
Дата 4.2.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Тогда надо отказываться от SHFileOperation и копировать файлы ручками через буфер.

P.S. Строка 1: " + '\0' " - не надо.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
kefir01
Дата 4.2.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



А можете сказать откуда копать? В смысле по функциям и проч.
PM MAIL   Вверх
PPS05
Дата 4.2.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Если нужен только общий прогресс - сразу считаешь размер всех файлов (кажется, GetFileSize) потом копируешь каждый файл с помощью CopyFile (попутно обновляя прогресс, ибо известен размер всех файлов и уже скопированных). 

Если именно пофайловый - то CreateFile, ReadFile, WriteFile, т.е. в той же fCopy открываешь файл, читаешь по блокам (ну, допустим, по 64КБ), пишешь в другой, обновляешь прогресс.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
kefir01
Дата 4.2.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Спасибо. Мне достаточно на самом деле посчитать число файлов, выставить ProgressBar1->Max на это число и после копирования каждого файла сдвигать на 1 позицию бара.
PM MAIL   Вверх
PPS05
Дата 4.2.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Не очень правильно, но если достаточно - то можно.  smile 


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
kefir01
Дата 4.2.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Дзякуй!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.