Что нового

[Файловая система] Работа с файлом, с точкой в конце

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
CreatoR сказал(а):
Код:
$pFrom = DllStructCreate("wchar[" & StringLen($sFrom) + 2 & "]")

Почему "+2"? Достаточно "+1".

Код:
$pFrom = DllStructCreate("wchar[" & StringLen($sFrom) + 1 & "]")



Добавлено:
Сообщение автоматически объединено:

Для удаления подобных файлов/папок можно использовать командную строку.

Microsoft сказал(а):
del "\\?\c:\путь_к_файлу_содержащему_конечный_пробел_или_точку"
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Почему "+2"? Достаточно "+1".
Это не ко мне, функцию не я писал, я только лишь добавил w перед char и к имени функции.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Кстати, эта функция давно уже присутствует в WinAPIEx.au3.
 

tech-gs

Знающий
Сообщения
54
Репутация
5
Изменение скрипта на юникод результата не дало.

Пробовал менять StringLen($sFrom) + 2 на StringLen($sFrom) + 1 (в пяти местах кода) - так же папка не удаляется.
$pFrom = DllStructCreate("wchar[" & StringLen($sFrom) + 1 & "]")
; pFrom will now be null-terminated at StringLen($sFrom)+1
DllStructSetData($pFrom, 1, $sFrom)
For $i = 1 To StringLen($sFrom) + 1
If DllStructGetData($pFrom, 1, $i) = 10 Then DllStructSetData($pFrom, 1, 0, $i)
Next
; We need a second null at the end
DllStructSetData($pFrom, 1, 0, StringLen($sFrom) + 1)
DllStructSetData($SHFILEOPSTRUCT, 3, DllStructGetPtr($pFrom))
; pTo
$pTo = DllStructCreate("wchar[" & StringLen($sTo) + 1 & "]")

Через командную строку так же ничего не выходит. При этом видно, что имя папки вставляется не то, какое копировал: p:\Desktop.ini\ГвТЯДїВјІ»ТЄЙѕя.\
Microsoft Windows [Version 6.1.7600]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

P:\Desktop.ini>del "\\?\p:\Desktop.ini\ГвТЯДїВ??>ТЄЙ?я.\"
Системе не удается найти указанный путь.

P:\Desktop.ini>del "\\?\p:\Desktop.ini\ГвТЯДїВ??>ТЄЙ?я."
Системе не удается найти указанный путь.

В WinAPIEx.au3 подходящей функции не нашел, подскажите, плиз, какую использовать.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Может попробывать заодно сменить кодировку файла скрипта? (File -> Encoding)
 

tech-gs

Знающий
Сообщения
54
Репутация
5
Эта папка была создана вирусом и скорее всего, для затруднения работы с ней, в имени используются символы из разных кодировок. Одним словом, смена кодировок ничего не дала, т.к. в UTF-8 например получается что-то вроде
$sFile = "\\?\P:\Desktop.ini\C3E2D2DFĿ¼B2BBҪɾFF." ; C3, E2... - так показывает AutoIt некоторые символы, на сайт они вставляются вообще в другом виде, и сообщением не отправляются
и непонятно, как правильно записать имя папки. Если в UTF-8 вставить скопированное имя папки "ГвТЯДїВјІ»ТЄЙѕя.", то предлагаемые функции работы с файлами/папками ее вообще не находят.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Избавьтесь сначала от вируса, а затем запустите штатную "Проверку дисков".
 

tech-gs

Знающий
Сообщения
54
Репутация
5
Вирусов нет. Подобные папки мне приносят регулярно на флешках, где уже все активные угрозы вылечены. А папки с такими именами к сожалению остаются, ни какими антивирусниками не воспринимаются как угрозы и соответственно не прибиваются.
Понимаю, что самый простой способ это отформатировать флешку и восстановить на нее данные. Но если это уже встает на поток, то честно говоря достало. Хотел сделать программку с возможностью выбора папки/файла для убития, но раз убить не получатся, то и о программке можно забыть. Спасибо.

P.s.: Проверка диска сообщает об отсутствии ошибок.
 
Верх