1

Тема: VBS: AtEndOfStream не дает дописывать. Как быть?

Что хочу сделать, пробегаюсь по файлам если есть искомая строка добавляю пометку, но AtEndOfStream не дает дописывать. Как быть?

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set file2 = objFSO.OpenTextFile(file, 2, True) 

For Each objFile In objFSO.GetFolder(strSource).Files        
Set file1 = objFSO.OpenTextFile(objFile, 1, False)

While Not file1.AtEndOfStream
sw = file1.ReadLine()

If InStr(1, sw, word) <> 0 Then
Set file1 = objFSO.OpenTextFile(objFile, 8, False)
file1.WriteLine("<!--OK-->")
End If
  
Wend

file1.close
Next

2

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

Закройте текстовый файл перед повторным открытием для дополнения.

3

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

закрыл вот так(по другому вроде никак)

If InStr(1, sw, word) <> 0 Then
file1.close
Set file1 = objFSO.OpenTextFile(objFile, 8, False)
file1.WriteLine("<!--OK-->")

все равно ругается "Недопустимый режим файла "

4

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

griha09, общий принцип примерно таков:

' IOMode Enum
Const ForReading   = 1
Const ForWriting   = 2
Const ForAppending = 8

Dim objFSO
Dim objFile

Dim boolFound
…


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

For Each objFile In objFSO.GetFolder(strSource).Files
    With objFSO.OpenTextFile(objFile, ForReading)
        boolFound = False
        
        Do Until .AtEndOfStream
            strLine = .ReadLine()
            
            If InStr(1, strLine, word) <> 0 Then
                boolFound = True
                
                Exit Do
            End If
        Loop
        
        .Close
    End With
    
    If boolFound Then
        With objFSO.OpenTextFile(objFile, ForAppending)
            .WriteLine("<!--OK-->")
            .Close
        End With
    End If
Next

5 (изменено: griha09, 2012-05-11 17:50:09)

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

Извините за назойливость, но что это за конструкция With ......End With? В поиске не могу найти описания, если есть дайте ссылку. И почему пишется  ".Close", а не например "File.Close"?

6 (изменено: creature.ws, 2012-05-11 19:31:23)

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

С точки зрения неспециалиста — отличная конструкция
Позволяет «не таскать по скрипту экземпляр объекта»
.Close пишется потому как действие сие применяется к объекту указанному в аргументе With

7

Re: VBS: AtEndOfStream не дает дописывать. Как быть?

И специалиста — тоже .

With Statement (VBScript).

Причём кому-то он так сильно не нравился, что в PoSH его убрали: Converting VBScript's With Statement, что довольно-таки странно.