Показать полную графическую версию : Ошибка Записи В Скрытый Файл На Vbs
term1nal
16-06-2014, 15:42
Добрый день!!! Облазил весь интернет, но ничего похожего не нашел сразу говорю) Проблема заключается в том, что вот этот кусок кода:
Set TextStream = FSO.OpenTextFile(".\Rezult.txt", 2, True)
TextStream.WriteLine DateL
TextStream.Close
Не хочет записывать в файл, если он скрытый. Если он обычный, все нормально. В чем может быть причина, ведь читает он нормально из скрытого файла? Винда - 7. Разрешения на папку и файл - все. Скрытый файл делается через правую кнопку, свойства, чекрыжек на "скрытый". Работаю под админом. Спасибо!
Option Explicit
Const ForWriting = 2
Const ReadOnly = 1
Const Hidden = 2
Const System = 4
Dim strSourceFile
Dim lngAttributes
strSourceFile = "C:\Песочница\045\Rezult.txt"
With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
With .GetFile(strSourceFile)
lngAttributes = .Attributes
.Attributes = lngAttributes And Not (ReadOnly + Hidden + System)
With .OpenAsTextStream(ForWriting)
.WriteLine Date()
.Close
End With
.Attributes = lngAttributes
End With
Else
With .CreateTextFile(strSourceFile)
.WriteLine Date()
.Close
End With
End If
End With
WScript.Quit 0
term1nal
17-06-2014, 09:10
Спасибо большое Iska. А в чем ошибка того кода? Почему метод opentextfile не стал записывать в скрытый файл?
term1nal
17-06-2014, 10:09
И еще такой маленький вопрос, почему not 1 равно -2. Ведь логическое отрицание 1 должно быть 0? А not 7 равно вообще -8? Объясни пожалуйста, или ткни в мануал какой. В гугле ищу, кроме базовых not or and и применения к true false не нахожу. Спасибо!
А в чем ошибка того кода? »
Ни в чём, насколько я понимаю.
Почему метод opentextfile не стал записывать в скрытый файл? »
Полагаю, это особенности реализации объекта TextStream в WSH.
И еще такой маленький вопрос, »
На будущее: один вопрос — одна тема.
почему not 1 равно -2. »
1₁₀ = 00000000000000000000000000000001₂
not 00000000000000000000000000000001₂ = 11111111111111111111111111111110₂
А 11111111111111111111111111111110₂ — это и есть -2₁₀ в дополнительном коде. Именно так представляются целые знаковые (signed) числа в WSH (и не только в нём).
Ведь логическое отрицание 1 должно быть 0? »
Это не «логическое отрицание». А битовая операция NOT, проводящаяся над числом. Логическая операция проводится над логическими величинами. Ну, и значение True не «1», а «-1». Следует предварительно преобразовать число к правильному типу данных — Boolean (последняя строка в нижеприведённом коде). Можете сравнить:
WScript.Echo "Not 1:", Not 1
WScript.Echo "True:", True
WScript.Echo "Not True:", Not True
WScript.Echo "Not CBool(1):", Not CBool(1)
Not 1: -2
True: -1
Not True: 0
Not CBool(1): 0
А not 7 равно вообще -8? »
Аналогично вышеизложенному. Можете даже проверить на калькуляторе в инженерном режиме, переключаясь с Dec на Bin и обратно.
Объясни пожалуйста, или ткни в мануал какой. »
Дополнительный код (представление числа) — Википедия (http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0 %B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1% 81%D0%BB%D0%B0))
term1nal
17-06-2014, 16:48
Iska, Огромное спасибо еще раз!!! Хорошего настроения Вам!!! Тема закрыта!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.