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

Поиск:

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


Шустрый
*


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

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



Как добавить в фаил текст, не стирая текста который там уже есть.
 smile  
--------------------
  
PM   Вверх
boevik
Дата 18.4.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso as Object, f as Object

   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForAppending, True)
   f.Write "Hello world!"
   f.Close

 


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


Опытный
**


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

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



Скажите пожалуйста!
А зачем здесь объявление констант в первой строке? 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 21.4.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ИгнатьевАлексей @  21.4.2006,  17:07 Найти цитируемый пост)
А зачем здесь объявление констант в первой строке?

а для получения читаемого кода. 


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

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


Новичок



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

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



А просто 
Open "C:\test.txt" for Append as #1 
Не канает? 
PM MAIL WWW   Вверх
Akina
Дата 3.5.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(goldstarKZ @  3.5.2006,  06:57 Найти цитируемый пост)
А просто
Код
Open "C:\test.txt" for Append as #1
Не канает?

1) Пользуемся тегом "Код".
2) Обходимся без сленга.
3) В объектно-ориентированном языке желательно избегать процедурно-ориентированных приемов программирования. 


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

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


Шустрый
*


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

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



А прочитать все строчки из текстового файла ?
[off]просьба не пинать - у меня пока не установлены MSDN и нет книги[/off] 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 4.5.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(XPurple @  4.5.2006,  14:02 Найти цитируемый пост)
просьба не пинать - у меня пока не установлены MSDN и нет книги

MSDN есть в online на сайте microsoft.


Цитата(XPurple @  4.5.2006,  14:02 Найти цитируемый пост)
А прочитать все строчки из текстового файла ?

Код

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso as Object, f as Object
Dim sFile as String

   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading, True)
   sFile = f.ReadAll()
   f.Close


 


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


Шустрый
*


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

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



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


Шустрый
*


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

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



А как избежать ошибки при открытии несуществующего файла? Если файл не существует, то выдается run-time error. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.5.2006, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(XPurple @  5.5.2006,  05:24 Найти цитируемый пост)
А как избежать ошибки при открытии несуществующего файла? Если файл не существует, то выдается run-time error.  

Так же при помощи FSO, можно проверить существование файла:
Код

Function ReportFileStatus(filespec)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(filespec)) Then
      msg = filespec & " exists."
   Else
      msg = filespec & " doesn't exist."
   End If
   ReportFileStatus = msg
End Function
 


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


Шустрый
*


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

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



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


Шустрый
*


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

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



А как избежать ошибки чтения файла нулевой длины ?
Сейчас при открытии такого файла на чтение выдается Run-time сообщение "Input past end of file" 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
vbCrLf
Дата 5.5.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Перед чтением файла проверь его размер.
Делается это с помощью функции FileLen(PathName as String) As Long,
которая возвращает размер файла в байтах.
Код

if FileLen(MyFile)= 0 then MsgBox "Файл нулевой длинны!"
 
PM MAIL ICQ   Вверх
Тутанхамец
Дата 5.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А учитывая, что "в объектно-ориентированном языке желательно избегать процедурно-ориентированных приемов программирования", то так:

Код

Dim fs As Scripting.FileSystemObject, f As Scripting.File, sz As Long

'Dim fs As variant, f As variant, sz As Long 'можно объявить и так

    Set fs = CreateObject("Scripting.FileSystemObject")
    If (fs.FileExists("c:\qq.txt")) Then
            Set f = fs.GetFile("c:\qq.txt")
             sz = f.Size
             MsgBox CStr(sz)
     end if

 
PM MAIL   Вверх
XPurple
Дата 6.5.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


Шустрый
*


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

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



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


Эксперт
***


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

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



Цитата(XPurple @  10.5.2006,  07:23 Найти цитируемый пост)
Функция Dir какому методу соответствует в объектно-ориентированном способе 

Dir возвращает по одному имени файлу в соотвествии маски из заданной папки.
Т.е, если надо получить имена всех файлов в папке, то требуется выполнить loop
Код

file_name = dir("c:\")
do while file_name<>""
'do something
file_name = dir() 'must without parameters
loop


Так же при помощи dir можно проверить существует ли определенный файл, т.е соотвествие FileExists
Код

file_name = dir("c:\meFile.txt")
if file_name <> 0 then
msgbox "The file is exists"
else
msgbox "File not found"
endif

  

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


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


Опытный
**


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

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




А если нужен список файлов или подпапок, то есть объект Folder с коллекциями SubFolders и Files.

Код

'вывод всех файлов и папок в папке windows

Dim fso As New Scripting.FileSystemObject
Dim fold As Scripting.Folder
Dim v As Variant
Set fold = fso.GetFolder("c:\windows")

For Each v In fold.Files
List1.AddItem v.Name
Next

For Each v In fold.SubFolders
List1.AddItem UCase(v.Name)
Next


 
PM MAIL   Вверх
XPurple
Дата 10.5.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не пойму как пользоваться DirectoryExists.
Выдает run-time ошибку Object doesn't support this property or method
на
Код

Set fso = CreateObject("Scripting.FileSystemObject")
sFile="c:\windows"
fso.DirectoryExists (sFile)
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Тутанхамец
Дата 10.5.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему ты решил, что такой метод есть? FolderExists. Вообще-то документацию бы неплохо почитать. В MSDN про fileSystemObject много интересных вещей написано.  
PM MAIL   Вверх
XPurple
Дата 10.5.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я не знаю, есть ли такой метод, поэтому и спрашиваю
http://search.msdn.microsoft.com/search/de...eid=0&tab=0 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Тутанхамец
Дата 10.5.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я думал мы говорим о Visual Basic 6 и FileSystemObject. А ты смотришь документацию для VB.NET.  
PM MAIL   Вверх
XPurple
Дата 10.5.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как при считывании из текстового файла строки с:\windows ReadAll() отбрасывать перевод строки OD OA ?
Иначе при выводе такой информации получается что-то типа c:\windows||||

Добавлено @ 11:44 
Цитата(Тутанхамец @  10.5.2006,  11:39 Найти цитируемый пост)
Я думал мы говорим о Visual Basic 6 и FileSystemObject. А ты смотришь документацию для VB.NET

Понятно. Я VB.Net знаю также плохо как и VB6. Нашел описание по ссылке MSDN, поиском которого мне советовали воспользоваться уважаемые участники этой темы.
 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Тутанхамец
Дата 10.5.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Либо:

Код

s=left$(s,len(s)-4) 'берет из s 4 все символы кроме четырех последних


Либо:

метод ReadLine

Description
Reads an entire line (up to, but not including, the newline character) from a TextStream file and returns the resulting string.
Syntax
object.ReadLine
The object argument is always the name of a TextStream object. 

Remarks
The following example shows how to use the ReadLine method to read a line from a TextStream file and return the string: 
Function ReadLineTextFile
  Const ForReading = 1, ForWriting = 2
  Dim fso, f
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
  f.Write "Hello world!"
  Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
  ReadLineTextFile = f.ReadLine
End Function

Добавлено @ 11:51 
В той же сетевой MSDN есть и про FileSystemObject

http://msdn.microsoft.com/library/default....43846037a0e.asp 
PM MAIL   Вверх
Akina
Дата 10.5.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(XPurple @  10.5.2006,  12:40 Найти цитируемый пост)
Как при считывании из текстового файла строки с:\windows ReadAll() отбрасывать перевод строки OD OA ?

ReadAll считывает в строковую переменную ВЕСЬ файл.
Либо ты будешь читать построчно, как описано выше.
Либо ты считаешь сразу весь файл, а потом порежешь его на строки, что проще всего делается функцией Split. 


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

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


Шустрый
*


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

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



Спасибо, получилось.
Как автоматически закончить программу после выполенения каких-либо действий ?
Т.е., например, вывести список файлов в файл и закончить программу. 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Akina
Дата 10.5.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



В нужном месте кода написАть слово End. Перед ним разместить код закрытия всех файлов, коннекшнов, выгрузку всех объектов и пр. - в общем убрать за собой. 


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

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


Шустрый
*


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

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



Цитата(Akina @  10.5.2006,  12:57 Найти цитируемый пост)
выгрузку всех объектов 

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


Шустрый
*


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

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



Как избежать run-time ошибки Access denied ? (Ох уж эти ошибки Run-time - Никогда не думал, что большую часть времени тратить на это) 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
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   Вверх
XPurple
Дата 16.5.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


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


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

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



Гм... вывести куда? чем тебе стандартный DirListBox не покатил? 


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

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


Шустрый
*


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

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



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


Опытный
**


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

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



Как вариант. Тебе нужна рекурсивная функция, которая перебирает всё, что лежит в папке (начиная, допустим, с диска С). Встретив файл, функция добавляет его в список (или выводит куда-то), а встретив папку - не только добавляет ее в список, но и вызывает себя же для перебора содержимого найденной папки.

Примерно так:
Код


public sub Search(folderspec as string)
dim MyFile as variant, MySubFolder as variant, MyFolder as variant
Set MyFolder = fso.GetFolder(folderspec)

for each MyFile in MyFolder.Files
list1.additem lcase$(MyFile.Name)
next 

for each MySubFolder in MyFolder.SubFolders
list1.additem ucase$(MySubFolder.path)
search MySubFolder.path
next

end sub



Сейчас пишу без VB, так что ошибки могут быть smile 

А из основной проги вызываешь эту процедуру для самой верхней папки, которую тебе надо рассмотреть: типа search "c:\windows"

  

Это сообщение отредактировал(а) Тутанхамец - 17.5.2006, 08:45
PM MAIL   Вверх
XPurple
Дата 17.5.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо. Идея ясна.
Вот что получилось в итоге
Код

Option Explicit
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, otf, gf, otf2 As Object
Dim sFile As String
Dim msg
Dim ConfFile, ResultFile, ResultDir As String
Dim confFileExist As Boolean
Dim fold As Object
Dim vfile As Object
Dim vdir As Object
Dim dirListStatus As String
Dim permissionFile As Boolean



Private Sub Form_Load()
ConfFile = "readdir.ini"
ResultDir = "\\media\Фильмы"
ResultFile = ResultDir & "\" & "Список фильмов.txt"
'ResultFile = "\\media\фильмы\Список фильмов.txt"
confFileExist = ReadConfFile()
'msg = MsgBox("Файл confFileExist" & confFileExist & " существует", vbInformation, "Результат")
On Error GoTo CheckError ' Turn on error handling.
    If confFileExist And fso.FolderExists(ResultDir) Then
    Set otf2 = fso.OpenTextFile(ResultFile, ForWriting, True)
    WriteListDir
    Else
    'msg = MsgBox("Файл resultDir" & fso.FolderExists(ResultDir) & " существует", vbInformation, "Результат")
    End If
 
CheckError:
permissionFile = PermissionAccess()

  End
End Sub

Public Function ReadConfFile() As Boolean

   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 = True
             'msg = MsgBox("Файл " & ConfFile & " нормальный", vbInformation, "Результат")
              Else
            'msg = MsgBox("Файл " & ConfFile & " пустой", vbInformation, "Результат")
            ReadConfFile = False
            'confFileExist = 0
            End If
          otf.Close
    Else
      'msg = MsgBox("Файл " & ConfFile & " не найден", vbInformation, "Результат")
   End If
End Function

Public Sub WriteListDir()
If fso.FolderExists(sFile) Then
Set fold = fso.GetFolder(sFile)
otf2.Write "Файлы в " & sFile & vbCrLf
dirListStatus = FileTree(fold)
otf2.Close
Else
'msg = MsgBox("Папка " & sFile & " не найдена", vbInformation, "Результат")
End If
End Sub

Public Function PermissionAccess() As Boolean
Const conErrPermissionDenied = 70
    If (Err.Number = conErrPermissionDenied) Then
    PermissionAccess = False
    'msg = MsgBox("Файл " & ResultFile & " не доступен", vbInformation, "Результат")
    Else
    'msg = MsgBox("Файл " & ResultFile & " доступен", vbInformation, "Результат")
        PermissionAccess = True
      End If
End Function

Public Sub ListFile()
For Each vfile In fold.Files
otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
otf2.Write (vfile.Name) & vbCrLf
Next
End Sub


Public Function FileTree(ByVal fold1 As Object) As String

For Each vdir In fold1.SubFolders
otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
otf2.Write UCase(vdir.Name) & vbCrLf
FileTree = FileTree(vdir)
Next
For Each vfile In fold1.Files
otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
otf2.Write (vfile.Name) & vbCrLf
Next
End Function

   

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


Шустрый
*


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

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



Как несколько одинаковых символов сгруппировать, например chr(151)? А то, на мой взгляд, длинная строчка получилась. Некрасиво как-то.
Код

otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
 
Не так давно в этой теме спрашивал: каким методом можно проверить, существует ли директория. Думал, по аналогии с методом FileExists он называется DirectoryExists. Оказалось, что это метод FolderExists.
p.s. Мне с помощью объектов FSO очень понравилось программировать. Кстати, абсолютно несложно. Гораздо легче, чем варьируя комбинациями функций open, close, dir и пр. К тому же, у функции Dir - оказался ,я даже не знаю как правильно сказать, неверное определение статуса зашаренной корневой папки.
Dir("\\share\resurs",vbDirectory) выдавал, у меня во всяком случае, 52 Run-time error "Bad file name or number"
p.p.s Название сайта Vingrad - что означает ? Какой-то молдавский город ? 

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


Опытный
**


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

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



Цитата

Как несколько одинаковых символов сгруппировать, например chr(151)? А то, на мой взгляд, длинная строчка 


Во-первых, юзай константы в таких случаях. например встроенная константа vbCrLf - это перевод строки, то есть chr(13)+chr(10).

Во-вторых - функция string.

Код

MsgBox String(100, 169)
MsgBox String(50, Chr(169))
MsgBox String(13, "q")


По поводу FSO - согласен, вещь неплохая smile 

Насчет vingrad - не знаю. У меня ассоциируется с WinGrad и "виноградом, который зелен". smile

Добавлено @ 12:27 
По поводу твоей проги - не совсем понятно зачем объект передавать в параметрах функции как ByVal... 
PM MAIL   Вверх
XPurple
Дата 17.5.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Тутанхамец @  17.5.2006,  12:26 Найти цитируемый пост)
По поводу твоей проги - не совсем понятно зачем объект передавать в параметрах функции как ByVal...  

Для рекурсивного вызова функции, если в папке есть подпапки. Новый объект-это subfolder, который найден в методе Subfolders для текущей папки
Цитата

 String(50, Chr(169))

То, что нужно. Не пеняйте меня, я ведь еще только учусь.
 

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


Опытный
**


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

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



Пока тебя, вроде, никто и не пнул smile 

Цитата

Для рекурсивного вызова функции, если в папке есть подпапки. 


Зачем передавать объект byVal? То есть по значению. Почему не ByRef?

Во-первых я не уверен, что Visual Basic вообще передаст объект по значению (то есть как копию объекта в стеке). Возможно, для объектов ByVal и ByRef идентичны. Но тут я не уверен. Может и передаст - это-то мне и не нравится. 

Если он все-таки передаст по значению (как копию), зачем тебе нужно занимать место в стеке копиями объектов? Да еще во время рекурсивного вызова функции, когда стек и так активно используется. Используй ByRef, передавай ссылку на объект. 

Кроме того, лучше указывать тип параметра не as object, а конкретно -  as Scripting.Folder. Ты ведь не собираешься передавать объекты разных типов.  
PM MAIL   Вверх
IvanB
Дата 17.5.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А есть ли в объектоном виде замена такой конструкции:
Код

Open "MYFILE.FIL" For Random As FileNum Len = RecLength
' Как написано в msdn-е

Т.е. вопрос такой :"Можно ли через объекты работать с файлами параллельного (случайного) доступа?". 
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней.
PM MAIL ICQ   Вверх
cardinal
Дата 17.5.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Тутанхамец @  17.5.2006,  07:45 Найти цитируемый пост)
 Тебе нужна рекурсивная функция, которая перебирает всё, что лежит в папке (начиная, допустим, с диска С).

В FAQ'е эта функция есть.

XPurple, делай сдвиги в коде, чтобы его было легче читать
Например не
Код

Public Function FileTree(ByVal fold1 As Object) As String

For Each vdir In fold1.SubFolders
otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
otf2.Write UCase(vdir.Name) & vbCrLf
FileTree = FileTree(vdir)
Next
For Each vfile In fold1.Files
otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
otf2.Write (vfile.Name) & vbCrLf
Next
End Function

а
Код

Public Function FileTree(ByVal fold1 As Object) As String
For Each vdir In fold1.SubFolders
   otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
   otf2.Write UCase(vdir.Name) & vbCrLf
   FileTree = FileTree(vdir)
Next

For Each vfile In fold1.Files
   otf2.Write Chr(124) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(151) + Chr(62)
   otf2.Write (vfile.Name) & vbCrLf
Next
End Function
 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
XPurple
Дата 18.5.2006, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Тутанхамец @  17.5.2006,  14:27 Найти цитируемый пост)
Зачем передавать объект byVal? То есть по значению. Почему не ByRef?

Исправлю.

Цитата(Тутанхамец @  17.5.2006,  14:27 Найти цитируемый пост)
Кроме того, лучше указывать тип параметра не as object, а конкретно -  as Scripting.Folder. 


Почему то у меня ругается на такой тип объектов. Обработчик выдает сообщение, что "user-defined type not defined" и ,кстати, обьявления объектов в таком виде "Dim fso As New FileSystemObject" тоже не объявляются по той же причине. Как это исправить ?


Цитата(cardinal @  17.5.2006,  22:29 Найти цитируемый пост)
делай сдвиги в коде, чтобы его было легче читать


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


Опытный
**


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

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



Цитата

Почему то у меня ругается на такой тип объектов. 


Зайди в меню "Проект" -> "Информации" (Project -> References) и поставь галочку напротив "Microsoft Scripting Runtime". Это список библиотек типов. Помеченные галочкой подключаются к твоему проекту и интепретатор их может различать. Чтобы посмотреть, какие типы данных уже, подключены нажми F2 или меню "Вид" -> Object Browser. Этот browser бывает полезен, когда надоп осмотреть, какие методы и свойства есть у какого-нибудь класса.

Добавлено @ 08:12 
Цитата

Т.е. вопрос такой :"Можно ли через объекты работать с файлами параллельного (случайного) доступа?".  


Фигово, но, кажется, нет. По крайней мере так было сказано в бумажном руководстве по VB 6.0 от Microsoft Press. Еще там, правда, было сказано, что ситуация, возможно, изменится с новой версией FSO. 
PM MAIL   Вверх
XPurple
Дата 18.5.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как запустить программу как фоновую? Если просто написать End в точке выхода, то при загрузке программы высвечивается значок мышки в виде песочных часов.


Цитата(Тутанхамец @  18.5.2006,  08:04 Найти цитируемый пост)
Зайди в меню "Проект" -> "Информации" (Project -> References) и поставь галочку напротив "Microsoft Scripting Runtime". 


У меня русифицированная версия, так еле-еле нашел, что References=Ссылки 

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


Опытный
**


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

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



А у меня она русифицирована так галимо, что слово "Информации..." всего лишь один из перлов...

Что значит запустить фоново? Если "фоновая программа" - это та, которую не видно, но которая работает, то простейший способ - в свойствах загружаемой формы установить visible в false.

В принципе, можно мутить без форм что-то вроде:

Код

sub main

while true

sleep(10)

doevents

'...любой код, выполняющийся в цикле...

wend

end sub


Но в большинстве случаев это будет неудобно.  Я так не делал никогда. По-моему, бейсик не для такого. 

P.S. Здесь вроде правило "Один вопрос - одна тема". Так действительно удобнее. Раз отошли от "Работы с файлом", то при следующих проблемах создавай новую тему. smile  
  

Это сообщение отредактировал(а) Тутанхамец - 18.5.2006, 17:22
PM MAIL   Вверх
XPurple
Дата 19.5.2006, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Тутанхамец @  18.5.2006,  17:20 Найти цитируемый пост)
Раз отошли от "Работы с файлом", то при следующих проблемах создавай новую тему. 

Немного увлекся, хорошо.


 
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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