18.12.2007, 18:36 | #1 |
Гость
|
WinApi::shellExecute("DEL"
почему
WinApi::shellExecute("DEL" не работает? можно как-то запустит? |
|
18.12.2007, 18:46 | #2 |
Участник
|
Лень разбираться
Вот так должно работать: X++: WinApi::shellExecute("cmd", "/c DEL C:\\Test\\dummy.txt"); |
|
18.12.2007, 19:26 | #3 |
Гость
|
близко. Но из \Temporary Internet Files\*.* не удаляет
|
|
18.12.2007, 20:00 | #4 |
Участник
|
а \Temporary Internet Files\*.* в "" ?
|
|
18.12.2007, 21:05 | #5 |
Участник
|
Угу. путь надо в кавычки брать, если пробелы есть
|
|
18.12.2007, 21:17 | #6 |
Участник
|
У меня из командной строки так тоже не получается.Только если зайти в саму папку и сделать del /p /s *. Тогда все ок.Как это в Аксе - не пробовал.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
19.12.2007, 11:24 | #7 |
Участник
|
А что, стандартная функция не подходит?
X++: print winAPI::deleteFile("C:\\Новая папка\\Текстовый документ.txt"); pause; return; Очевидно, что параметр - это то, что от одного пробела до другого. Если сам параметр внутри себя содержит пробелы, то их надо как-то экранировать. Как? Заключить весь параметр в кавычки. Все просто, если поставить себя на место программиста, пытающегося решить аналогичную проблему. |
|
19.12.2007, 11:36 | #8 |
Участник
|
Цитата:
А DEL позволяет использовать wildcards. |
|
19.12.2007, 11:39 | #9 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
А что, стандартная функция не подходит?
X++: print winAPI::deleteFile("C:\\Новая папка\\Текстовый документ.txt"); pause; return; Очевидно, что параметр - это то, что от одного пробела до другого. Если сам параметр внутри себя содержит пробелы, то их надо как-то экранировать. Как? Заключить весь параметр в кавычки. Все просто, если поставить себя на место программиста, пытающегося решить аналогичную проблему.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
19.12.2007, 11:49 | #10 |
MCTS
|
Цитата:
А стандартная папку сотрет?
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
19.12.2007, 11:50 | #11 |
Участник
|
Похоже что не сотрет:
Цитата:
If an application attempts to delete a file that does not exist, the DeleteFile function fails. If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. To delete a read-only file, you must first remove the read-only attribute.
.......
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 Последний раз редактировалось Alex_KD; 19.12.2007 в 12:04. |
|
19.12.2007, 11:58 | #12 |
Участник
|
Цитата:
X++: // Удаление файлов по маске static void test_FileSystemObject(Args _args) { COM comFSO = new COM("Scripting.FileSystemObject"); Filename filename = "C:\\Новая папка\\*.txt"; ; // Удалаяет все файлы по маске, даже если они помечены как Read-Only comFSO.DeleteFile(filename); } X++: // Удаление директорий со всем содержимым static void test_FileSystemObject(Args _args) { COM comFSO = new COM("Scripting.FileSystemObject"); Com comFolder; FileFolder_RU fileFolder_RU = "C:\\Новая папка"; ; print "До удаления ", comFSO.FolderExists(fileFolder_RU); if (comFSO.FolderExists(fileFolder_RU)) { comFolder = comFSO.GetFolder(fileFolder_RU); comFolder.delete(true); // true - удалить, даже если каталог Read-Only } print "После удаления ", comFSO.FolderExists(fileFolder_RU); pause; } |
|
|
За это сообщение автора поблагодарили: kashperuk (5), Alenka (1). |
19.12.2007, 12:31 | #13 |
Участник
|
Ну и при чем тут экзотика? Просто через Win32 API это все реализовать более муторно, поэтому COM напрашивается сам собой. К слову, удалять директории можно и без промежуточных объектов
X++: COM comFSO = new COM("Scripting.FileSystemObject"); FileFolder_RU fileFolder_RU = "C:\\Новая папка"; ; if (comFSO.FolderExists(fileFolder_RU)) comFSO.DeleteFolder(fileFolder_RU, true); // true - удалить, даже если каталог Read-Only |
|
20.12.2007, 12:34 | #14 |
Участник
|
Попробуйте так
X++: filename path; filename fileName; filename fileExt; int nHandle; container c; ; ...... ...... fileExt = "*.txt"; c = WinApi::findFirstFile(path + fileExt); nHandle = conpeek(c, 1); fileName = conpeek(c, 2); while (strLen(fileName)) { WinApi::deleteFile(path + "\\" + fileName); fileName = WinApi::findNextFile(nHandle); } ... Параметры для нее в макросе Winapi Последний раз редактировалось nano3; 20.12.2007 в 12:39. |
|
20.12.2007, 13:17 | #15 |
Участник
|
О. То о чем я и говорил - перебор файлов надо писать.
А если в папке еще и под-папки есть, то этот метод не будет работать, придется еще его расширять на поиск в подпапках... |
|
20.12.2007, 13:28 | #16 |
Участник
|
Цитата:
Цитата:
If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. To
delete a read-only file, you must first remove the read-only attribute.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
25.12.2007, 15:06 | #17 |
Участник
|
Если кого-то заинтересовал объект Scripting.FileSystemObject и что еще при помощи него можно сделать, то его описание на русском языке с примерами использования можно посмотреть здесь
http://kodu.neti.ee/~juri4/vfpplus/vbs_fso_01_ru.htm Правда, примеры использования там приведены в синтаксисе FoxPro. Но перевести их в X++ особого труда не составит. Ну, или ищите на сайте Microsoft |
|
25.12.2007, 17:20 | #18 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Если кого-то заинтересовал объект Scripting.FileSystemObject и что еще при помощи него можно сделать, то его описание на русском языке с примерами использования можно посмотреть здесь. Ну, или ищите на сайте Microsoft
|
|