Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SHFileOperation и SHFILEOPSTRUCT, работа с несколькими файлами 
:(
    Опции темы
ActioN
Дата 5.5.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Требуется удалить несколько файлов с помощью SHFileOperation. Для удаления одного файла нужно, как говориться в MSDN, поставить в конце null-terminated символ. С одним файлом проблем нету, все удаляется хороше, но вот как быть с несколькими файлами? Вот цитата из MSDN:
Address of a buffer to specify one or more source file names. These names must be fully qualified paths. Standard Microsoft® MS-DOS® wildcards, such as "*", are permitted in the file name position. Although this member is declared as a null-terminated string, it is used as a buffer to hold multiple file names. Each file name must be terminated by a single NULL character. An additional NULL character must be appended to the end of the final name to indicate the end of pFrom
Если я правильно понял, то нужно сделать так:
Код

String fNames;
for (int i = 0; i < 3; i++)
    fNames = fNames+StringList->String[i]+"\0";
    
fNames = fNames+"\0";

Но функция не работает. Пишет, что такого файла нету. Перепробовал все возможные варианты - та же проблема. Подскажите пожалуйста, как правильно оформить параметр pFrom структуры SHFILEOPSTRUCT?
 
PM MAIL WWW   Вверх
Coala
Дата 5.5.2006, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробуй собрать pFrom следующим образом:
Код

#include <stdio.h>
  char buf[2048]; // это - демо-пример, поэтому берем буфер, в который 3 имени войдут гарантированно
  buf[0] = 0;
  char tmp[512];
  for (int i = 0; i < 3; i++) {
    sprintf(tmp, "%s\0", StringList->Strings[i].c_str());
    strcat(buf, tmp);
  }
  strcat(buf, "\0");

и затем подставь этот буфер в вызов ShFileOperation.
Проверь в отладчике, что хранится в буфере - там должна быть строка вида fname1.ext\0fname2.ext\0fname3.ext\0\0. 
PM MAIL   Вверх
ActioN
Дата 6.5.2006, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Coala, тоже неработало. В буффере было что-то типа fname1.extfname2.ext.fname3.ext (без завершающих символов между именами файлов и без 2х завершающих после последнего имени файла) ... и еще куча мусора на оставшиеся 2048 символов smile. Решил попробовать вместо "\0" написать char(0) и получилось. Интересно, почему с "\0" не работает, а с char(0) работает, вроде бы ж одинаковые варианты. 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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