OpentextFile В доступе отказано в разрешении - PullRequest
0 голосов
/ 10 июня 2009

Я получаю сообщение об ошибке при использовании opentextfile. Проблема странная, потому что она работает для нескольких сотен файлов, а затем всплывает.

Обычно скрипт получает набор файлов, ищет в них строку, которую затем удаляет, и записывает измененное содержимое в тот же файл. Проблема возникает, когда скрипт хочет снова открыть файл, чтобы он мог записать в него измененное содержимое.

Это код:

For Each objFile in colFiles

   Set objCurrentFile = objFSO.OpenTextFile(objFile.Path, ForReading)

  'Get file contents - exclude end tag                  '
   Do Until objCurrentFile.AtEndOfStream

     strLine = objCurrentFile.ReadLine

     If InStr(strLine, strSearchTerm) = 0 Then
        strNewContents = strNewContents & strLine & vbCrLf
     End If
   Loop

   objCurrentFile.Close

   objCurrentFile = nothing

  'Write new file contents to existing file                '
   Set objNewFile = objFSO.OpenTextFile(objFile.Path, ForWriting) 'PROBLEM LINE              '

  objNewFile.Write strNewContents
  objNewFile.Close
  objNewFile = nothing
Next

Ответы [ 3 ]

0 голосов
/ 17 июня 2009

Я нашел проблему. Я открывал текстовый файл и затем копировал его в другую папку, а затем выполнял дополнительные операции с файлом перед закрытием потока.

Как только я переместил код файла копии до того, как открыл поток, он работает отлично.

Спасибо за помощь, я буду использовать ваш код в будущем, чтобы быть безопасным при работе с текстовыми файлами.

0 голосов
/ 31 августа 2017

вы можете попытаться дать полный контроль доступа к папке, где находится файл для чтения.

0 голосов
/ 10 июня 2009

Файл только для чтения.
Попробуйте добавить это, прежде чем открыть текстовый файл для записи.
Если файл доступен только для чтения, он удалит атрибут только для чтения.

IsReadOnly = False
IF objFile.Attributes AND 1 Then
    objFile.Attributes = objFile.Attributes - 1
    IsReadOnly = True
End If

Затем добавьте это, когда закончите запись в файл.
Если файл был только для чтения, верните его в режим только для чтения.

If IsReadOnly Then
    objFile.Attributes = objFile.Attributes + 1
    IsReadOnly= False
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...