• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Удаление файлов

  • Автор темы B22
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

B22

Всем привет!

Народ - помогите!
Вот есть у меня массив CString - ArrayFindFiles. В этот массив заносятся имена и пути к файлам. Потом мне необходимо удалить все эти файлы из массива в корзину с помощью функции SHFileOperation. Там, как я знаю в структуру должна передаваться строка в которой файлы разделяются (\0) - нуль символом, а в конце строки должно быть два (\0\0).
У меня масив выглядит примерно так:
C:\Temp\Temp_1.txt
C:\Temp\Temp_2.txt
C:\Temp\Proba.txt

А строка в памяти должна иметь вид C:\Temp\Temp_1.txt\0C:\Temp\Temp_2.txt\0C:\Temp\Proba.txt\0\0

КАК МНЕ ЭТО СДЕЛАТЬ?
 
M

Maxx

создаешь большую строку чтобы влезли все имена файлов (не забудь выделить место для \0), копируешь их туда и отправляешь функции SHFileOperation
 
B

B22

Я пишу так:
int i;
СString str="";
for(i=0;i<m_Total;i++)
{
str=str+ArrayFindFiles[m_Total-(i+1)]+"\0";
}
str=str+"\0";

char* pSTR=str.GetBuffer();
А потом выдается ошибка -
"Не удается удалить файл. Неудается произвести чтение из файла или диска"
 
S

sdriver

Вернемся к MSDN:

int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp
);


typedef struct _SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

File deletion is recursive unless you set the FOF_NORECURSION flag in lpFileOp

Код реализации функции в студию.Помогем.
 
B

B22

int i;
СString str="";
for(i=0;i<m_Total;i++)
{
str=str+ArrayFindFiles[m_Total-(i+1)]+"\0";
}
str=str+"\0";
char* pSTR=str.GetBuffer();
SHFILEOPSTRUCT opstruc;
opstruc.hwnd=NULL;
opstruc.wFunc=FO_DELETE;
opstruc.pFrom=pSTR;
opstruc.pTo=NULL;
opstruc.fFlags = FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS;
opstruc.lpszProgressTitle = "Удаление файлов";
SHFileOperation(&opstruc);
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Код:
str=str+ArrayFindFiles[m_Total-(i+1)]+"\0";

+"\0" скорее всего обрабатывается так как Вы ожидаете, потому что "\0"==""
 
P

Partisan

У меня такое чувство, что вместо

"\0"(двойные кавычки=строка символов)

надо писать

'\0' (одинарные кавычки=один символ)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!