Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Проблема с FSO при записи в лог

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует