powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Банальное копирование содержимого каталога в другой
21 сообщений из 21, страница 1 из 1
Банальное копирование содержимого каталога в другой
    #39222269
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые форумчане. Пожалуй это наверное тоже вопрос из нубских, но все же видимо никак до меня не доходящий. Подскажите как говорится кто чем может:
Имеется 2 каталога, записанных в переменные типа String.
В первом может лежать что угодно, второй как правило пуст.
Вопрос банален - необходимо скопировать все содержимое первого каталога во второй.

Я уже попробовал разные варианты. В основном все проблемы с этими гадскими char, wchar_t*, без звездочки и т.п.

Последний вариант моих стараний выглядит вот так.
Правда мне кажется он не подходит т.к. он будет копировать и сам каталог1 в каталог 2, а мне надо копировать только содержимое каталога1. Думаю здесь надо как-то использовать что-то типа перебора файлов с рекурсией. Но вот как это сделать пока понять не могу. Подскажите как это можно реализовать. Я юзаю Embarcadero Rad Studio XE.
А вот мой последний неудачный пример - компилятор ругается на то что не может преобразовать wchar_t в char.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void __fastcall CopyFolders(String FileSource, String FileDestan)
{
	SHFILEOPSTRUCTA sf;

	sf.pFrom = FileSource.c_str();
    sf.pTo = FileDestan.c_str();
    sf.wFunc = FO_COPY;
    sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_SILENT;

    SHFileOperationA(&sf);
}
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222329
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char и wchar_t это разные кодировки. Первая - один байт на символ, вторая - два байта.
Ты определись в какой тебе надо, настрой свой проект на нее и про вторую вообще забудь.
SHFileOperationA() буква А тут лишняя.
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222335
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, В проекте используется wchar_t. Покажите пожалуйста с ним пример. Все гугловские примеры, которые я находил были расчитаны на char
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222370
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с char работаю. Готового не дам.

У МС есть правило: давать название функции и делать две: ФункцияA() и ФункцияW() где вариант A - для char, W для wchar_t. Но в коде эти буквы не должны присутствовать, просто писать Функция() компилятор сам разбется какую из двух взять. В соответствии с настройками проекта.

Убери A, возможно заработает, т.е.
Код: plaintext
1.
2.
3.
SHFILEOPSTRUCT sf;
...
SHFileOperation(&sf);
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222421
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, и действительно. Убрал буквы А и ошибок больше нет. Здорово. Интересно а получается мой код будет копировать прям с каталогом вместе или только его содержимое. Хотелось бы только содержимое. Ну сейчас проверим. Спасибо. Отпишусь позже.
Получилось вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void __fastcall TFEditChanges::CopyFolders(String FileSource, String FileDestan)
{
	SHFILEOPSTRUCT sf;

	sf.pFrom = FileSource.c_str();
	sf.pTo = FileDestan.c_str();
	sf.wFunc = FO_COPY;
	sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_SILENT;

	SHFileOperation(&sf);
}
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222432
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааааа ах...ть. Какая прелесть. Вот это да... И копирует все и каталоги и подкаталоги и файлы и папку лишнюю не создает. Оказывается как я был близок к этому. И несомненно жирную точку поставил Dima T. Спасибо огромное, все заработало...
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222435
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Отпишусь позже.
Думаешь, ком-то интересен твой "Hello World"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222441
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, Кому неинтересно, разрешаю не читать:)
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222444
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13, обязательно почитай про макросы _UNICODE и UNICODE. Это необходимо знать.
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39222447
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, ок, я запишу себе на полях ежедневника
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223520
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Недолго музыка играла. Как то странно эта функция копирует через раз. А то и вобще не копирует. Возвращает код 2. По гуглу вроде как надо добавть нулевой символ. Но опять таки все примеры через char. А в моем то случае как быть?
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223524
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код теперь выглядит вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void __fastcall TFEditChanges::CopyFolders(String FileSource, String FileDestan)
{
    int res;
	SHFILEOPSTRUCT sf;
	ZeroMemory(&sf, sizeof(SHFILEOPSTRUCT));

	sf.pFrom = FileSource.c_str();
	sf.pTo = FileDestan.c_str();
	sf.wFunc = FO_COPY;
	sf.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

	res = SHFileOperation(&sf);
	ShowMessage(String(res));
}
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223525
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13А то и вобще не копирует. Возвращает код 2.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx ERROR_FILE_NOT_FOUND
2 (0x2)
The system cannot find the file specified.

Разбирайся что в параметрах даешь.

По хорошему для начала тебе надо на С писать поучиться, а потом уже за WinAPI браться. Все твои вопросы никакого отношения к копированию не имеют. Все из-за незнания языка. Зачем тебе С ? WinAPI доступно из любого языка.
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223529
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, Дело не в С. Да и я вроде как писал, что проект рабочий на нем написан, вот и надо его ковырять. Но в любом случае - я разобрался. Просто банально добавил символы '\0' к каталогам и вуаля

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void __fastcall TFEditChanges::CopyFolders(String FileSource, String FileDestan)
{
    int res;
	SHFILEOPSTRUCT sf;
	ZeroMemory(&sf, sizeof(SHFILEOPSTRUCT));

	FileSource = FileSource + '\0';
	FileDestan = FileDestan + '\0';

	sf.pFrom = FileSource.c_str();
	sf.pTo = FileDestan.c_str();
	sf.wFunc = FO_COPY;
	sf.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

	res = SHFileOperation(&sf);
	ShowMessage(String(res));
}
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223530
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто мне сложно с С в том, что в нем геморно со строками работать
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223536
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Просто мне сложно с С в том, что в нем геморно со строками работать
Не геморно, а не так как в других ЯП. Я об этом и говорю - возьми и поизучай как со строками работать.

.c_str() дает строку с нулем на конце, поэтому твое добавление '\0' вообще ничего не изменило. Косяк где-то в другом месте. При ошибке выводи не только код ошибки, но и что было в исходных данных, т.е. FileSource и FileDestan
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223538
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну незнаю незнаю... Прогоняю уже по ...цатаму разу. Все хорошо копировать началось. В гугле там как раз про 2 нуля писали. Вот и получается 1 я добавляю руками, второй добавляет c_str().
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223539
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, вобщем спасибо тебе еще раз отдельное по буквам А:) Уже я попробовал и с подкаталогами копировать и всяко разно. Вроде все копируется.
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223543
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13В гугле там как раз про 2 нуля писали.

а гугл то зачем? в MSDN чёрным по белому всё написано - https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb759795(v=vs.85).aspx
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223548
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И правда два нуля надо, не знал.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb759795(v=vs.85).aspx pFrom
...
A pointer to one or more source file names. These names should be fully qualified paths to prevent unexpected results.
...
Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.
Если так, то должно помочь.
...
Рейтинг: 0 / 0
Банальное копирование содержимого каталога в другой
    #39223553
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и получилось:) Все таки я думаю мой пост будет не бесполезен... Все таки мне тяжеловато было воспринимать англ доку. А примеры в гугле по большей части полны шлака. Как говорится век живи век учись
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Банальное копирование содержимого каталога в другой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]