Имя: Пароль:
1C
1С v8
Проблема с FSO при записи в лог
0 art-adm
 
31.10.16
10:33
Всем доброго дня.

Возникла проблема при попытки записи в файл логов строки со степенями (мм в квадрате, см в квадрате). Возникает исключение: (WriteLine): Произошла исключительная ситуация (0x800a0005)

fso=Новый COMОбъект("Scripting.FileSystemObject");
Если Не fso.FileExists(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла)    Тогда     file=fso.CreateTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, -1, 0);
file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка);
file.Close();
Иначе       file=fso.OpenTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, 8, 0);
file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка);
file.Close();
КонецЕсли;
1 Живой Ископаемый
 
31.10.16
10:34
крут!
2 Лефмихалыч
 
31.10.16
10:35
места нет или прав
3 Лефмихалыч
 
31.10.16
10:36
или ПутьКВременнойПапке не существует
4 art-adm
 
31.10.16
10:43
Дело точно в степени. В строку для записи в лог файл передается наименование номенклатуры. В наименовании некоторых есть "мм в квадрате". Как только убираешь степень - все записывается нормально. Может кто-то работал с fso? Может быть есть возможность как-то форматнуть строку до передачи в метод?
5 art-adm
 
01.11.16
08:46
UP
6 NorthWind
 
01.11.16
08:54
полностью строку проблемную выведите путем Сообщить () и скопируйте ее сюда, может, чего-то прояснится.
7 NorthWind
 
01.11.16
08:57
длина строки не превышает никаких "магических цифр" типа 255, 1024, ... ?
8 art-adm
 
01.11.16
09:07
(6) (7) Сама строка:
Файл 307253 у товара Отверт. узел 16-35 1,5-10 мм? IP20 не будет загружен. Причина: Уже загружен
9 art-adm
 
01.11.16
09:09
Вместо знака вопрос - возведение во 2 степень. Движок форума видимо не отображает степени.
10 art-adm
 
01.11.16
09:12
11 art-adm
 
01.11.16
09:14
Предыдущая ссылка неверная.
http://s018.radikal.ru/i512/1611/45/2fa8f04ecbe5.png
12 tndr
 
01.11.16
09:22
13 Живой Ископаемый
 
01.11.16
09:55
в чем помочь?
14 SiAl-chel
 
01.11.16
10:03
() А если попробовать объект ЗаписьТекста?
15 Лефмихалыч
 
01.11.16
10:11
Кавычки забыл.
Путь с пробелами должен быть в кавычках:
""""+ПутьСПроблемаи+"""";
16 Fedor-1971
 
01.11.16
10:18
(0) попробуй вставить свою строку в блокнот и сохранить - получишь ошибку "есть символы, которые невозможно сохранить в текущем формате", а ты программно его формируешь

Выход:
- перебери символы в строке и всё что не входит в стандартные печатные символы замени на ? или что другое
- возможно, этого ограничения лишен объект TextStream (object.OpenAsTextStream([iomode, [format]]))

(15) больше похоже на ошибку формата строки - "недопустимое значение параметра"
17 Fedor-1971
 
01.11.16
10:24
16+ Script56.CHM - найди такой файлик, это хелп по WSH там много чего интересного есть. Хотя сейчас мелкософт рекомендует использовать PowerShell.

(0) ещё один путь решения твоей проблемы - форматирование строки с использованием регулярных выражений. Поинтересуйся, занятная штука (нормальное описание там, же или поищи информацию про объект RegExp).
18 Fedor-1971
 
01.11.16
10:43
(0) по поводу кода
fso=Новый COMОбъект("Scripting.FileSystemObject");
file=fso.OpenTextFile(""+ПутьКВременнойПапке+"\"+ПолноеИмяФайла, 8, true); - гарантированно получишь файл, если его нет, система создаст (одна засада, при неверном пути, система создаст файл неизвестно где, скорее всего в %temp%)

Проверяй существование пути, а не файла. Если надо проверишь его наличие позже (отлаживать проще, иначе будешь долго думать где проблема в пути или в имени файла)
if(!FSO.FolderExists(ПутьКВременнойПапке)) - нет пути к временной папке

Не дублируй:
file.WriteLine(""+ТекущаяДата()+ " "+прм_Строка);
file.Close();
вынеси оные за Если - КонецЕсли; Файл у тебя всё равно создастся или откроется
19 NorthWind
 
01.11.16
21:48
В порядке бреда... Есть подозрение, что ввиду тяжкого наследия неюникодных ОС текстовые файлы в VBS создаются только в однобайтовых национальных кодировках. Ввиду чего попадание на вход юникодных символов, которые не могут быть однозначно оттранслированы в кодовую страницу 1251 (для русской винды), вызывает данную ошибку.
Вывод - либо перед записью самостоятельно исправлять строку так чтобы в ней таких символов не было, либо использовать заведомо юникодный объект. Например, ADODB.Stream, который точно держит текстовые файлы и кодировку UTF-8.
20 NorthWind
 
02.11.16
08:10
хотя, по прочтению доки оказалось что это именно бред, хотя мысль, похоже, была в верном направлении. Для CreateTextFile и OpenTextFile можно указать формат Unicode. Попробуйте сделать это, возможно, поможет. Вот ссылки.
http://scriptcoding.ru/2013/07/08/fso-createtextfile/
http://scriptcoding.ru/2013/07/29/fso-opentextfile/
21 art-adm
 
03.11.16
11:38
(18)(19)(20) Спасибо.
Проблема похоже действительно в кодировке. Попробую с Unicode.
22 Torquader
 
04.11.16
02:19
(19) Не надо хаять VBS.
При открытии файла есть четвёртый параметр, позволяющий переключить Scripting.TextStream в режим Unicode.

' как записать в файл строку с неизвестными символами
Function ToWin(ByRef s)
    Dim l
    Dim i
    ToWin=""
    l=Len(s)
    For i=1 To l Step 1
        ToWin=ToWin & Chr(Asc(Mid(s,i,1)))
    Next
End Function
' как бы, Unicode-строка
u=ChrW(25045) & ChrW(14714)
' вариант первый - перекодирование
Set fso=CreateObject("Scripting.FileSystemObject")
Set f=fso.OpenTextFile("Test.1",8,True,False)
' Здесь будет ошибка - невозможно перекодировать
'f.WriteLine(u)
' а здесь не будет
f.WriteLine(ToWin(u))
f.Close()
' вариант второй - можно вообще писать в Unicode
Set f=fso.OpenTextFile("Test.2",8,True,True)
f.WriteLine(u)
f.Close()
MsgBox "Files",0,"OK"
23 NorthWind
 
04.11.16
08:58
(22) Да, позже увидел, см. (20).