Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлом, Как добавить в фаил текст 
V
    Опции темы
Akina
Дата 10.5.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(XPurple @  10.5.2006,  14:39 Найти цитируемый пост)
Как избежать run-time ошибки Access denied ?

Следить за правами доступа. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
XPurple
Дата 11.5.2006, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Цитата(Akina @  10.5.2006,  14:33 Найти цитируемый пост)
Следить за правами доступа.  

Это понятно. Я имею ввиду,какой фукцией проверить: есть или нет доступ на запись. IOPermission ?
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 11.5.2006, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Возможно и есть такая функцуя, но IMHO, легче просто правильно обработать ошибку. 
Потому что между проверкох на доступ и реальным доступом, другой процесс может влезть и захватить файл.
И опять вернулись к run-time error. 

Это сообщение отредактировал(а) boevik - 11.5.2006, 07:23


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 12.5.2006, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Цитата(boevik @  11.5.2006,  07:22 Найти цитируемый пост)
но IMHO, легче просто правильно обработать ошибку. 

Хотелось бы знать как. Я ,к сожалению, не знаю.
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 12.5.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Слышал про On Error ...?
Если нет, то почитай.
Принцип такой:
Код

public function DoSomething()
On Error Goto errHandle
....
exit function
errHandle:
msgbox Err.description

При любой ошибке в коде управление перйдет к коду после label errHandle.
 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 12.5.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



До кучи почитай про иерархию обработчика ошибок - чтобы понимать какой сработает при отсутствии обработчика в процедуре... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 12.5.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Хе-хе. Еще недели две, и эта тема будет полным справочником по VB. smile  
PM MAIL   Вверх
XPurple
Дата 12.5.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Про коды ошибок я прочитал.
Область действия "On error" do end-а или exit-а ? Я правильно понял ?
Цитата(Тутанхамец @  12.5.2006,  13:18 Найти цитируемый пост)
Хе-хе. Еще недели две, и эта тема будет полным справочником по VB. 

Так это ж хорошо!
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
vbCrLf
Дата 12.5.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.5.2006
Где: Севастополь

Репутация: 1
Всего: 1



Цитата(XPurple @  12.5.2006,  13:33 Найти цитируемый пост)
Область действия "On error" do end-а или exit-а ? Я правильно понял ?

Область действия до End текущей процедуры/функции.
err.Number     - возвращает номер ошибки,
err.Description - описание ошибки.
Если вдруг Вам нужно игнорировать ошибки в Вашей процедуре/функции, то напишите в начале
Код
On Error Resume Next

Тогда при ошибке программа всё-равно будет продолжать выполняться,
но в err.Number и err.Description будет занесена информация об ошибках.

Для того, чтобы сбросить информацию об ошибке, используйте Err.Clear.
  

Это сообщение отредактировал(а) vbCrLf - 12.5.2006, 13:57
PM MAIL ICQ   Вверх
XPurple
Дата 12.5.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Программа заработала. До идеала, конечно, далеко.
Хочу ,чтобы вы посоветовали, что сделано неправильно в программе
Код

Option Explicit
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso As Object, otf As Object, gf As Object, otf2 As Object
Dim sFile As String
Dim msg
Dim ConfFile, ResultFile As String
Dim confFileExist As Integer
Dim fold As Object, fold1 As Object
Dim v As Variant
Const FileConf = "config1.txt"



Private Sub Form_Load()
ResultFile = "\\media\фильмы\Список фильмов.txt"
ConfFile = "config.ini"
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(ConfFile)) Then
      

      Set otf = fso.OpenTextFile(ConfFile, ForReading, True)
      Set gf = fso.GetFile(ConfFile)
             If gf.Size > 0 Then
             sFile = otf.ReadLine()
             confFileExist = 1
             'msg = MsgBox("Файл " & ConfFile & " нормальный", vbInformation, "Результат")
           
            Else
            'msg = MsgBox("Файл " & ConfFile & " пустой", vbInformation, "Результат")
            confFileExist = 0
            End If
            
   otf.Close
  
   Else
      'msg = MsgBox("Файл " & ConfFile & " не найден", vbInformation, "Результат")
   End If
        If confFileExist Then
    Set fold = fso.GetFolder(sFile)
    On Error GoTo CheckError ' Turn on error handling.
    Set otf2 = fso.OpenTextFile(ResultFile, ForWriting, True)

CheckError:
Const conErrPermissionDenied = 70
    If (Err.Number = conErrPermissionDenied) Then
    'msg = MsgBox("Файл " & ConfFile & " не доступен", vbInformation, "Результат")
    Else
    'msg = MsgBox("Файл " & ConfFile & " доступен", vbInformation, "Результат")
    
otf2.Write "Файлы в " & sFile & vbCrLf
For Each v In fold.Files
otf2.Write (v.Name) & vbCrLf
Next
otf2.Close
For Each v In fold.SubFolders

otf2.Write UCase(v.Name) & vbCrLf
Next
    End If
        Else
        End If
  End
End Sub
  

Это сообщение отредактировал(а) XPurple - 12.5.2006, 14:26
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 12.5.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Для начало, разбей ка эту функцию в 60 строк на несколько мелких функций, где каждая выполняет одно действие.
К примеру, открытие файла с проверками на существование и т.п., запись в файл - другая функция.
Будет легче читать и тестировать.
 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 12.5.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Думал, только мне тяжело читать. Разобью, спасибо за совет. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
XPurple
Дата 16.5.2006, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Функция как значение возвращает ? Что-то не нашел. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 16.5.2006, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Код

private myFunc() as boolean
   myFunc = true   'возвращение значения
end function
 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 16.5.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



Гран-мерси
Перевел часть кода в виде процедур и функций
Код

Option Explicit
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso As Object, otf As Object, gf As Object, otf2 As Object
Dim sFile As String
Dim msg
Dim ConfFile, ResultFile As String
Dim confFileExist As Integer
Dim fold As Object, fold1 As Object
Dim v As Variant

Private Sub Form_Load()
ConfFile = "readdir.ini"
ResultFile = "\\media\фильмы\Список фильмов.txt"
confFileExist = ReadConfFile()
If confFileExist Then
    Set fold = fso.GetFolder(sFile)
    On Error GoTo CheckError ' Turn on error handling.
    Set otf2 = fso.OpenTextFile(ResultFile, ForWriting, True)

CheckError:
PermissionDenied
    
        Else
        End If
  End
End Sub

Public Function ReadConfFile() As Integer

   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(ConfFile)) Then
        Set otf = fso.OpenTextFile(ConfFile, ForReading, True)
      Set gf = fso.GetFile(ConfFile)
             If gf.Size > 0 Then
             sFile = otf.ReadLine()
             'confFileExist = 1
             ReadConfFile = 1
             'msg = MsgBox("Файл " & ConfFile & " нормальный", vbInformation, "Результат")
              Else
            'msg = MsgBox("Файл " & ConfFile & " пустой", vbInformation, "Результат")
            ReadConfFile = 0
            'confFileExist = 0
            End If
          otf.Close
    Else
      'msg = MsgBox("Файл " & ConfFile & " не найден", vbInformation, "Результат")
   End If
End Function

Public Sub WriteListDir()
otf2.Write "Файлы в " & sFile & vbCrLf
For Each v In fold.Files
otf2.Write (v.Name) & vbCrLf
Next
otf2.Close
For Each v In fold.SubFolders
otf2.Write UCase(v.Name) & vbCrLf
Next
End Sub

Public Sub PermissionDenied()
Const conErrPermissionDenied = 70
    If (Err.Number = conErrPermissionDenied) Then
    'msg = MsgBox("Файл " & ConfFile & " не доступен", vbInformation, "Результат")
    Else
    'msg = MsgBox("Файл " & ConfFile & " доступен", vbInformation, "Результат")
    WriteListDir
      End If
End Sub


  

Это сообщение отредактировал(а) XPurple - 16.5.2006, 11:38
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.