• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы 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' (одинарные кавычки=один символ)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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