Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
kirdenoff
17 / 17 / 8
Регистрация: 21.10.2011
Сообщений: 113
1

Ошибка при проверке существования файла (VBS)

21.02.2013, 15:04. Просмотров 960. Ответов 4
Метки нет (Все метки)

Здравствуйте, у меня проблема: есть файл, в который я пишу логи своего скрипта. У данного файла выставлены права только на чтение. Я хочу при записи новых логов в данный файл, менять у него права, предварительно проверяя, есть ли такой файл или нет.
Делаю я это таким способом:
Visual Basic
1
2
3
 If oFSO.FileExist(sLogPath) Then
        sLogFile.Attributes = 0
    End If
Тут - то и начинается трабл, так как пишет интерпретатор, что такое свойство объект не поддерживает.
буду признателен за помощь. Может, неправильно делаю что-то? Подскажите.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Sub GetFilesList(FolderName)
 
    Const sLogPath = "C:\Temp\copy_file.txt"
    
    ' Создание объекта класса FileSystemObject
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    ' Создание объекта Folder
    Set oFolder = oFSO.GetFolder(FolderName)
    Set oLogFile = oFSO.CreateTextFile(sLogPath, True)
    
    ' Получение коллекции файлов
    Set oFilesCollection = oFolder.Files
    
    ' Получение количества элементов в коллекции
    sResult = sResult & " Скопировано файлов: " & oFilesCollection.Count & vbCrLf
    
    ' Чтение атрибутов каждого файла из коллекции
    For Each oFile in oFilesCollection
        sResult = sResult & oFile.Name & vbTab
        sResult = sResult & oFile.Size & vbCrLf
    Next
    
    Set sLogFile = fso.GetFile(sLogPath)
    
        ' ********* РУГАЕТСЯ НА ЭТИ СТРОЧКИ *****************
    'если файл с логами существует, то изменяем права на доступ
    'If oFSO.FileExist(sLogPath) Then
    '   sLogFile.Attributes = 0
    'End If
        '************************************************   
 
    oLogFile.Writeline(sResult)
    
    'устанавливаем права только на чтение
    sLogFile.Attributes = 1
 
    MsgBox(sResult)
    
    MsgBox "Информация о копировании сохранена в Файл " & sLogPath, vbInformation, "Логирование работы программы"
 
End Sub
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 15:04
Ответы с готовыми решениями:

Ошибка при запуске vbs файла
При запуске выкидывает ошибку Sub Test() With Application.Workbooks.Item(Test.xls) Dim Mas0...

Try-catch в проверке существования треугольника
Создаю статический метод который проверяет существует ли треугольник с заданными сторонами, метод...

Сайт CodeWars при проверке решения выдаёт ошибку, при проверке в VisualStudio ошибки нет
Задача написать метод,который будет проверять порядок круглых скобок. Написал код, проверил в...

Ошибка при проверке
∞ Ʃ ((-1)^n) *((x^n)/((2*n)!)) n=0 an=((-1)^n) *((x^n)/((2*n)!)) an-1=((-1)^n-1)...

Ошибка 216 при проверке
Выдает 216-ю ошибку,не могу понять,в чем причина. uses crt; type TElint = byte; TElelem...

4
Апострофф
Заблокирован
21.02.2013, 15:53 2
Visual Basic
1
If oFSO.FileExistS(sLogPath) Then 'буквы не хватало
Visual Basic
1
Set sLogFile = Ofso.GetFile(sLogPath) 'здесь тоже
1
kirdenoff
17 / 17 / 8
Регистрация: 21.10.2011
Сообщений: 113
21.02.2013, 16:27  [ТС] 3
Большое спасибо!
Но появилась новая трабла: пишет "Разрешение отклонено", ругаясь на строку
Visual Basic
1
Set oLogFile = oFSO.CreateTextFile(sLogPath, True)
.
Видимо, не может изменить права файла....
Есть мысли на этот счет?
0
Dragokas
Эксперт WindowsАвтор FAQ
17098 / 7153 / 861
Регистрация: 25.12.2011
Сообщений: 10,954
Записей в блоге: 16
21.02.2013, 18:15 4
Лучший ответ Сообщение было отмечено как решение

Решение

kirdenoff, ясное дело: Вы поток не закрываете. Файл еще не создан, запись не завершена - доступа нет (файл заблокирован).

Измените порядок команд. Добавьте метод Close.

Visual Basic
1
2
3
4
5
6
7
oLogFile.Writeline(sResult)
oLogFile.Close
Set oLogFile = Nothing
 
Set sLogFile = ofso.GetFile(sLogPath)
sLogFile.Attributes = 1
Set sLogFile = Nothing
Что значит часть кода "Если файл существует"? - конечно же существует. Вы же сами его создаете.

Префиксы у переменных странные. s - это обычно String, а не объект. Запутаться можно.

Добавлено через 2 минуты
Visual Basic
Const sLogPath = "C:\Temp\copy_file.txt"
лучше заменить на авто-определение папки для временных файлов Windows:

Visual Basic
sLogPath = environ("temp") & "\copy_file.txt"
Добавлено через 2 минуты
Поставьте первой строчкой кода директиву:
Visual Basic
Option Explicit
объявите все переменные. И сразу увидите все проблемы.
1
kirdenoff
17 / 17 / 8
Регистрация: 21.10.2011
Сообщений: 113
22.02.2013, 01:55  [ТС] 5
Спасибо. Совсем забыл про Option Explicit!
Спасибо всем, кто откликнулся на мой призыв о помощи. Завтра буду опять мучаться, надеюсь, что все заработает как надо.
0
22.02.2013, 01:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 01:55

Ошибка при проверке массива
sf::String *TileMap = new sf::String; for (size_t i = 0; i < 15; i++) { TileMap = " ...

Ошибка при проверке на существование
Вот код: if (mysql_query("SELECT * FROM `".$db_prefix."sites` WHERE `link` = `".$url_site."`"))...

Ошибка при проверке диапазона
Program p1; var a:array of integer; x,y,m,i:integer; begin writeln('введите колличество чисел,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.