как проверить наличие файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Юра П
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 23.12.2004 (Чт) 22:44

как проверить наличие файла

Сообщение Юра П » 04.03.2005 (Пт) 18:30

' Если файла нет данный код выдает ошибку
Dim sTemp As String
Open sFile + "yura.txt" For Input As #1
If Not EOF(1) Then
Line Input #1, sTemp
End If
Close #1

Можно перехватить ошибку и написать, что файла нет.
Мне неудобно использовать этот способ, т.к. далее идет код.

Есть ли способ узнать существует ли файл?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 04.03.2005 (Пт) 18:42

Ставишь в начало процедуры
Код: Выделить всё
on error goto errhandler


И в конец
Код: Выделить всё
errhandler:
if err=53 then msgbox "Файл не существует"
exit sub

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 04.03.2005 (Пт) 18:51

Код: Выделить всё
if dir(sFileName)="" then msgbox("А файла то тю-тю")

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 04.03.2005 (Пт) 18:56

ГЫ тоже вариант, а я просто увидел отловить ошибку и все...:D

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 04.03.2005 (Пт) 20:10

Ну так лучше обойтись без ошибок :D

Юра П
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 23.12.2004 (Чт) 22:44

Сообщение Юра П » 04.03.2005 (Пт) 21:52

Ramzes, с обработчиком и я умею, но в моем случае это не удобно.
Потому что мне надо проводить определенные действия после обработки наличия файла в любом случае (еслть илл нет файла). И в варианте с обработчиком надо писать одинаковый 2 раза . Секешь? :wink:


vvs_adm, большое спасибо - это то что я спрашивал. В Сях это делается проще, сразу ф-я открытия возвращает неудачу - 0, в случае отсутствия файла. :D

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 05.03.2005 (Сб) 0:23

Вопрос к бывалым. Какие минусы у:
if dir(sFileName)="" then msgbox("А файла то тю-тю")

Может минусов и вообще нет, просто немного смущает if dir(sFileName)=""

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 05.03.2005 (Сб) 0:24

А чем, собсна смущает? :)

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 05.03.2005 (Сб) 0:36

Ну... как сказать... Если бы выглядело так:
If ExistFile(FileName) = True
то это не вызвало бы у меня подозрений :)

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 05.03.2005 (Сб) 7:10

Ну зачем же одинаковый писать два раза? А условный переход?

on error goto errhandler

код

continue:

код

exit sub
errhandler:
if err=53 then msgbox "Файл не существует"
goto continue
Всё бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.03.2005 (Сб) 8:38

vvs_adm, правильнее писать If Len(Dir$(filename)) = 0 Then ...
Кроме того, если filename содержит символы ":" и некоторые другие, то будет вызвана ошибка.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.03.2005 (Сб) 11:32

alibek писал(а):vvs_adm, правильнее писать If Len(Dir$(filename)) = 0 Then ...
Кроме того, если filename содержит символы ":" и некоторые другие, то будет вызвана ошибка.


Точнее правильней так не писать вообще.

Элементарная ситуация - пользователю запрещено листинг файлов. Что мы тогда получим на Dir ???

Лучше уж пользовать такую функцию:
Код: Выделить всё
Private Function FileExists(sFile As String) As Boolean
    On Error Resume Next
    FileExists = ((GetAttr(sFile) And vbDirectory) = 0)
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 05.03.2005 (Сб) 11:45

Если пользователю запрещен листинг файлов, то файл для него не существует. И по Dir мы получим, что файла нет.
I don't understand. Sorry.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.03.2005 (Сб) 11:49

RayShade писал(а):Если пользователю запрещен листинг файлов, то файл для него не существует. И по Dir мы получим, что файла нет.


Чего ради не существует?

Просто он не может прочитать содержимое каталога, но если он знает имя файла то может его использовать. Я этим давно пользуюсь - файлы видит только программа (она то знает где что лежит).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 05.03.2005 (Сб) 12:02

Ага. Только если программа запущена под акаунтом пользователя, который не может читать сисок файлов, то и файлы по моему она не увидит... Ведь когда у человека нет пермиссии, то это распрстраняется и на процесы, которые он запускает.
I don't understand. Sorry.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.03.2005 (Сб) 12:20

RayShade, есть право чтение файла, а есть право на листинг файлов в директории.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 05.03.2005 (Сб) 12:36

RayShade писал(а):Ага. Только если программа запущена под акаунтом пользователя, который не может читать сисок файлов, то и файлы по моему она не увидит... Ведь когда у человека нет пермиссии, то это распрстраняется и на процесы, которые он запускает.


А программе не надо список файлов - она не делает Dir.
Она просто берет и открывает файл (имя файла берется из базы).

Человек тоже может открыть тот-же файл, но для этого ему нужно набрать ручками полный путь к нему ибо выбрать из списка (который не читается) он его не может.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 05.03.2005 (Сб) 20:14

Andrey Fedorov писал(а):On Error Resume Next

А что эта конструкция делает? Т.е. общий смысл понятен, но вот детали...
И чем отличается On Local Error Resume Next?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2005 (Вс) 8:24

В принципе, если подходить к вопросу строго, on error goto здесь правильнее. Ибо, теоретически, может возникнуть ситуация, когда система переключает поток выполнения на другую программу после того, как мы вызвали Dir, но до того, как мы пошли выполнять действия :) И вот если та прога, на которую система переключилась, сотрёт файл, то возникнет ошибка отсутствия файла, хотя Dir был <>"" :)

По второму вопросу: http://www.experts-exchange.com/Program ... 75558.html
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 06.03.2005 (Вс) 12:34

а через fileSystemObject не канает?

Dir вылетит если папка неправильно указана.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.03.2005 (Вс) 13:25

Sebas писал(а):Dir вылетит если папка неправильно указана.

Неправда - проверь.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 159

    TopList