kill не стирает файлы со скобками в имени.

S

seoman2

Lotus team
17.02.2010
480
1
Почему-то Kill oname$ не стирает файлы, у которых oname$ содарди символ ")" или "(".

Чтобы обойти проблему, думал сделать батник, но
fileNum% = Freefile()
Open "" For Append As fileNum%
Print # fileNum%, "del " & oname$

вместо русских имен в батник пишет краказяблы (((
 
oshmianski

oshmianski

Достойный программист
Lotus team
25.04.2012
633
33
Open statement (LotusScript Language)

Charset = MIMECharsetName ?
 
lmike

lmike

нет, пердело совершенство
Lotus team
27.08.2008
7 259
439
вместо русских имен
патамучта вместо нормальной кодировки (юникод) винда использует что попало, и программам отдает что попало
нек программы "ждут" виндовз1251
причин масса...
батники, в винде, используют локаль cp866 ;)
короче, виндовз - это сплошная помойка из легаси кода...
 
  • Нравится
Реакции: Vertigo
garrick

garrick

Lotus team
26.10.2009
1 024
81
Имя файла в кавычки брать не пробовали?
Код:
kill {"} + filename + {"}
 
S

seoman2

Lotus team
17.02.2010
480
1
Нет, проблема не в синтаксисе kill.

В батнике у меня cp866 русский текст краказяблами, а надо в Windows-1251.
в Open ... Charset = "Windows-1251" не помогает.
 
garrick

garrick

Lotus team
26.10.2009
1 024
81
Я не про батник, а про имя файла в Windows, например некоторые "недопустимые" символы легко вписываются в имя файла, если имя файла взять в кавычки.
 
lmike

lmike

нет, пердело совершенство
Lotus team
27.08.2008
7 259
439
Нет, проблема не в синтаксисе kill.

В батнике у меня cp866 русский текст краказяблами, а надо в Windows-1251.
в Open ... Charset = "Windows-1251" не помогает.
"пользователь виндовз должен страдать"
почему вы не хотите идентифицировать происхождение "проблемы", яж сказал - "проблема" в винде, там она и решается
надо просто привыкнуть к мысли - винда - это не просто :), как упомянул - там куча легаси, на поддержку которого свои костыли и подпорки
 
  • Нравится
Реакции: Vertigo
S

seoman2

Lotus team
17.02.2010
480
1
Юзер нажимает кнопку, в которой прописано удаление файла в винде. Что делать?
 
garrick

garrick

Lotus team
26.10.2009
1 024
81
И к стати, если это агент, вы ему выдали соответствующие права?
 
VladSh

VladSh

начинающий
Lotus team
11.12.2009
1 508
54
Только что попробовал. seoman2 прав - при удалении файла, содержащего в имени скобки возвращается Error="Path/file access error" (Err=75). У агента максимальные права.
 
lmike

lmike

нет, пердело совершенство
Lotus team
27.08.2008
7 259
439
Только что попробовал. seoman2 прав - при удалении файла, содержащего в имени скобки возвращается Error="Path/file access error" (Err=75). У агента максимальные права.
я потому и спрашивал про источник появления файла ;), если из нотусятины - никто не мешает давать уникальное название, но исключающее символы вне латинских букв и цифр (подчеркивание и точку - можно ;) )
 
A

alexas1

Lotus team
10.04.2014
1 109
217
Юзер нажимает кнопку, в которой прописано удаление файла в винде. Что делать?
чуть изменить скрипт - перед удалением, сначала переименовать файл в нормальное имя, а затем удалить
файл со скобками переименовывается без проблем
 
S

seoman2

Lotus team
17.02.2010
480
1
У меня в лотусовой карточке в ричтекст поле rtitem хранятся вложения юзеров.
Ну и чтобы обработать эти файлы, я делаю
Код:
Forall obj In rtitem.EmbeddedObjects
....
Call obj.ExtractFile( datapatch$ & obj.Source ) 
....
 
A

alexas1

Lotus team
10.04.2014
1 109
217
У меня в лотусовой карточке в ричтекст поле rtitem хранятся вложения юзеров.
Ну и чтобы обработать эти файлы, я делаю
Код:
Forall obj In rtitem.EmbeddedObjects
....
Call obj.ExtractFile( datapatch$ & obj.Source )
....
и што?
 
VladSh

VladSh

начинающий
Lotus team
11.12.2009
1 508
54
Фантастика какая-то... Или, что скорее всего, я тупанул - теперь файл со скобками Kill'ом удаляется без проблем.
Ошибка Error="Path/file access error" (Err=75) возникает при отсутствии файла на диске, т.е. при повторном вызове Kill для этого файла :)
 
S

seoman2

Lotus team
17.02.2010
480
1
VladSh - можно Ваш пример?

Файл на диске точно есть.

Код:
Forall obj In rtitem.EmbeddedObjects

....

Call obj.ExtractFile( datapatch$ & obj.Source )

....

Kill    datapatch$ & obj.Source
 
VladSh

VladSh

начинающий
Lotus team
11.12.2009
1 508
54
Открыл старый проект, и там в функции-обёртке для kill перед удалением вызывается isFileExist, т.е. уже когда-то это обходил:
Код:
Function isFileExist(sFileName As String) As Boolean
    isFileExist = (Len(Dir(sFileName, 6)) <> 0)
End Function
 
VladSh

VladSh

начинающий
Lotus team
11.12.2009
1 508
54
seoman2
Создал файл на диске со скобками, дальше ему просто Kill "путь_к_файлу".

1. Возможно клиент держит вложение, и поэтому его невозможно удалить:
- если используете поток, то закройте его перед удалением файла.
- если вложили в какой-то другой док, то сохраните его перед удалением файла с диска.
- некоторые версии клиента могут работать некорректно. У нас один и тот же код регистрации отрабатывает по разному. Код сохраняет локально id-файл пользователя, а потом пытается его удалить. Так вот 8-й клиент его без проблем удаляет, а 9-й валится с такой же ошибкой 75.

2. Проверьте права пользователя на удаление из папки. У нас когда-то такое было при переходе на Win7 - файлы успешно выкладывались по стандартному пути в профиле, но удалиться в этом же скрипте не могли. Из-за отсутствия времени не стали разбираться с доступами в ФС, поэтому сделали в корне диска C папку для работы с вложениями из Lotus, - помогло.

3. Проверьте полный путь файла. У Винды ограничение - вроде как 255 символом в латинской раскладке. Файл может сохраниться по этому большому путь, но удалить Kill'ом будет невозможно. В этом случае придётся либо пользоваться спец. утилитами (слышал, что такие есть), но мы просто запускали проверку диска, там производится проверка и исправление ошибок файловой системы.
По нормальному надо писать функцию-обёртку для выкладывания файла на диск, в которой проверять, есть ли уже файл и удалять его, затем проверять длину пути файла...
 
S

seoman2

Lotus team
17.02.2010
480
1
протесть свой скрипт с аттачем с именем "От(чё-т", т.к. с "От(чё)-т" всё будет ок.
 
Мы в соцсетях: