Войти

Показать полную графическую версию : Ошибка Записи В Скрытый Файл На Vbs


term1nal
16-06-2014, 15:42
Добрый день!!! Облазил весь интернет, но ничего похожего не нашел сразу говорю) Проблема заключается в том, что вот этот кусок кода:

Set TextStream = FSO.OpenTextFile(".\Rezult.txt", 2, True)
TextStream.WriteLine DateL
TextStream.Close

Не хочет записывать в файл, если он скрытый. Если он обычный, все нормально. В чем может быть причина, ведь читает он нормально из скрытого файла? Винда - 7. Разрешения на папку и файл - все. Скрытый файл делается через правую кнопку, свойства, чекрыжек на "скрытый". Работаю под админом. Спасибо!

Iska
16-06-2014, 17:08
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 не нахожу. Спасибо!

Iska
17-06-2014, 16:41
А в чем ошибка того кода? »
Ни в чём, насколько я понимаю.

Почему метод 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