Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Удаление папки с файлами / 17 сообщений из 17, страница 1 из 1
05.02.2015, 11:10
    #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
05.02.2015, 12:14
    #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
05.02.2015, 12:36
    #38872141
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Dim2000,
А как это звучит по-пауэрбилдеровски?
Код: sql
1.
setNull(lstr_FileOp.pTo)

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

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

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

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2015, 13:11
    #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
05.02.2015, 14:23
    #38872327
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
05.02.2015 13:11, Riska пишет:

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

Я же в первом ответе написал, что это.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2015, 14:59
    #38872401
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Dim2000,
ОК.
Спрошу по-другому.
Как удалить папку 'C:\tempdir' со вложенными файлами?
Можно привести скрипт без объяснений.
...
Рейтинг: 0 / 0
06.02.2015, 02:25
    #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
06.02.2015, 02:29
    #38872937
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Забыл написать.
Присвоение Space(...) уберите, оно не нужно.
...
Рейтинг: 0 / 0
06.02.2015, 10:11
    #38873056
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Обязательно использовать WinAPI?
Проще зайти в папку удалить все файлы, затем удалить папку.
Все встроенными функциями FileDelete и RemoveDirectory
...
Рейтинг: 0 / 0
08.02.2015, 11:02
    #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
08.02.2015, 11:09
    #38874123
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Кстати, вот это тоже работает (но через Run):
Код: sql
1.
Run('cmd /c rd C:\tempdir /s/q')
...
Рейтинг: 0 / 0
08.02.2015, 20:02
    #38874252
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Так я не это имел ввиду
spas2001Все встроенными функциями FileDelete и RemoveDirectory
...
Рейтинг: 0 / 0
08.02.2015, 20:06
    #38874254
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Зачем вообще OLE или RUN или WinAPI?
Тем более, что нет нужды удалять открытые файлы
Открыл директорию, загрузил список файлов в листбокс и if FileExist(ls_file) then FileDelete(ls_file).
Затем сменил директорию и ее удалил.
И не нужно велосипеды изобретать без необходимости.
...
Рейтинг: 0 / 0
18.02.2015, 00:34
    #38882347
lalka12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
Помогите разобряться с этим языком, уже 2 дня хочу программировать начать
...
Рейтинг: 0 / 0
19.02.2015, 12:56
    #38883863
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление папки с файлами
18.02.2015 0:34, lalka12 пишет:

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

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


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