powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Удаление папки с файлами
17 сообщений из 17, страница 1 из 1
Удаление папки с файлами
    #38871997
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Салям!

Нужно удалить папку со всеми внутренними файлами/папками.
Нельзя использовать Run.

Как это сделать?
Вот здесь есть какая-то ошибка.
Код: sql
1.
FUNCTION LONG SHFileOperationW(Ref SHFileOpStruct     lpFileOp) LIBRARY 'SHELL32.DLL'



Структура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
global type shfileopstruct from structure
	long		hwnd
	unsignedinteger		wfunc
	string		pfrom
	string		pto
	unsignedinteger		fflags
	boolean		banyoperationsaborted
	long		hnamemappings
	string		lpszProgressTitle
end type



Скрипт на кнопке:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
shfileopstruct lstr_FileOp

lstr_FileOp.hWnd                                = Handle (PARENT)
// 1 - move, 2 - copy, 3 - delete, 4 - rename
lstr_FileOp.wFunc                                = 3
lstr_FileOp.pFrom                                = Space (256)
lstr_FileOp.pFrom                                = 'C:\tempdir'
lstr_FileOp.pTo                                    = Space (256)
lstr_FileOp.pTo                                    = ''
lstr_FileOp.fFlags                                = 1
lstr_FileOp.bAnyOperationsAborted   = True
lstr_FileOp.hNameMappings               = 0
lstr_FileOp.lpszProgressTitle = Space( 80 )
lstr_FileOp.lpszProgressTitle = "..."

long ll
ll=  SHFileOperationW(lstr_FileOp)

IF ll <> 0 THEN
    MessageBox( string(ll), "Фигня какая-то!!!" )
END IF
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872102
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2015 11:10, Riska пишет:

> lstr_FileOp.pFrom =Space (256)
> lstr_FileOp.pFrom ='C:\tempdir'

pFrom

Type: PCZZTSTR

Note This string must be double-null terminated.

> lstr_FileOp.pTo =Space (256)
> lstr_FileOp.pTo =''

pTo

Type: PCZZTSTR

Note This string must be double-null terminated.

A pointer to the destination file or directory name. This parameter
must be set to NULL if it is not used.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872141
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000,
А как это звучит по-пауэрбилдеровски?
Код: sql
1.
setNull(lstr_FileOp.pTo)

не играет рояля :(
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872181
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2015 12:36, Riska пишет:

> А как это звучит по-пауэрбилдеровски?

Что-то типа + Сhar(0) + Сhar(0)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872218
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000,
Не помогло :(
А lstr_FileOp.pFrom - это простой стринг?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
shfileopstruct lstr_FileOp

lstr_FileOp.hWnd                                = Handle (PARENT)
lstr_FileOp.wFunc                                = 3
lstr_FileOp.pFrom                                = Space (256)
lstr_FileOp.pFrom                                = 'C:\tempdir'
lstr_FileOp.pTo                                    = char(0) + char(0)
lstr_FileOp.fFlags                                = 1
lstr_FileOp.bAnyOperationsAborted   = True
lstr_FileOp.hNameMappings               = 0
lstr_FileOp.lpszProgressTitle = Space( 80 )
lstr_FileOp.lpszProgressTitle = "Look ma, doing file ops here..."

long lb
lb =  SHFileOperationW(lstr_FileOp)

IF lb <> 0 THEN
    MessageBox( string(lb), "An error has occurred during a file operation" )
END IF
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872327
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.02.2015 13:11, Riska пишет:

> А *lstr_FileOp.pFrom* - это простой стринг?

Я же в первом ответе написал, что это.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872401
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000,
ОК.
Спрошу по-другому.
Как удалить папку 'C:\tempdir' со вложенными файлами?
Можно привести скрипт без объяснений.
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872934
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska,

У меня нет решения.
Но я вижу следующие проблемы в вашем коде, которые гарантированно портят картину.

1)
Вот эти поля структуры в WinAPI имеют размер 32 бита, а unsignedinteger в ПБ 16-битный, про boolean не знаю, но вероятно что тоже не 32 бита.
Код: sql
1.
2.
3.
	unsignedinteger		wfunc
	unsignedinteger		fflags
	boolean		banyoperationsaborted



Замените int на long. А boolean тоже можно на всякий заменить на long с 0 - false, 1- true

2) Как выше сказано поле pTo должно быть NULL для этой операции.
Для этого объявите его long и присвойте 0.

3) pFrom это строка в которой после имени файла и завершающих двух 0 (которые есть в любой строке юникодного ПБ), нужно вручную дописать еще два 0.
Вы их не дописываете.

Я бы для этого использовал blob. Только нужно учесть что в блобе при преобразовании из строки не будет завершающих нулей, поэтому дописывать надо уже 4 нуля.
Примерно так:
Код: sql
1.
2.
3.
4.
...
blob pFrom
...
lstr_FileOp.pFrom = blob('C:\tempdir') + blob(long(0)) // long(0) - это как раз 4 нулевых байта


PS. Извините что без готового скрипта и с объяснениями
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38872937
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл написать.
Присвоение Space(...) уберите, оно не нужно.
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38873056
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обязательно использовать WinAPI?
Проще зайти в папку удалить все файлы, затем удалить папку.
Все встроенными функциями FileDelete и RemoveDirectory
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38874121
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001,
Проще зайти в папку удалить все файлы, затем удалить папку.
Не проще.

Это работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
OleObject ole_filesys, ole_file

IF DirectoryExists ( 'C:\tempdir' ) THEN
	ole_filesys = CREATE OleObject
	ole_filesys.ConnectToNewObject( "Scripting.FileSystemObject" )
	ole_file = CREATE OleObject
	ole_file = ole_filesys.GetFolder( 'C:\tempdir')
	ole_file.Delete(true)

	IF IsValid(ole_filesys) THEN DESTROY ole_filesys
	IF IsValid(ole_file) THEN DESTROY ole_file
END IF


Нужно учесть, что удаляются и открытые файлы!
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38874123
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот это тоже работает (но через Run):
Код: sql
1.
Run('cmd /c rd C:\tempdir /s/q')
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38874252
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я не это имел ввиду
spas2001Все встроенными функциями FileDelete и RemoveDirectory
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38874254
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вообще OLE или RUN или WinAPI?
Тем более, что нет нужды удалять открытые файлы
Открыл директорию, загрузил список файлов в листбокс и if FileExist(ls_file) then FileDelete(ls_file).
Затем сменил директорию и ее удалил.
И не нужно велосипеды изобретать без необходимости.
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38882347
lalka12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобряться с этим языком, уже 2 дня хочу программировать начать
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38883863
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.02.2015 0:34, lalka12 пишет:

> Помогите разобряться с этим языком, уже 2 дня хочу программировать начать

Начинай, мы не против .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Удаление папки с файлами
    #38884436
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор[заблокирован]
Да, начинай, мы не против
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Удаление папки с файлами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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