КАК проверить есть ли файл вообще ?

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

КАК проверить есть ли файл вообще ?

Сообщение MiRC » 17.06.2003 (Вт) 18:52

Есть задача - нужно определить есть ли файл disk:\dir\filename , с помошью какой функции ??? Уже битый час ищу - всяких findfile вроде бы нет !!! :evil:

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

Сообщение RayShade » 17.06.2003 (Вт) 18:59

Очень просто. Берем FileSystemObject и используем его метод GetFile.

Если вернет Nothing то файла нет.

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 17.06.2003 (Вт) 23:09

Вроде в FSO есть специальная функция - FileExists(FileSpec As String).
А можно и без FSO
Код: Выделить всё
Function FileExist(filename As String) As Boolean
   FileExist = Dir$(filename) <> ""
End Function

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

Сообщение RayShade » 18.06.2003 (Ср) 10:43

Код: Выделить всё
if len(dir$(filename))>0


Работать будет быстрее... :P

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

Сообщение GSerg » 19.06.2003 (Чт) 9:41

Ну тогда уж
Код: Выделить всё
If Len(Dir(Filename)) Then


Ещё быстрее. :P А доллар не нужен, потому что Dir изначально объявлена как стринг.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение RayShade » 19.06.2003 (Чт) 10:25

Alas, он не быстрее :) Потому что придется еще преобразовать (coerce) Int к Bool :)

STING
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 19.06.2003 (Чт) 17:20

Re: КАК проверить есть ли файл вообще ?

Сообщение STING » 19.06.2003 (Чт) 20:21

Dim fn As String
fn=Dir("Путь к файлу")
If fn = "" Then
MsgBox "Файл не существует!"
Else
MsgBox "Файл существует!"
End If

помоему так проще и быстрее. :wink:

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Re: КАК проверить есть ли файл вообще ?

Сообщение SergeySV » 20.06.2003 (Пт) 8:58

STING писал(а):Dim fn As String
fn=Dir("Путь к файлу")
If fn = "" Then
MsgBox "Файл не существует!"
Else
MsgBox "Файл существует!"
End If

помоему так проще и быстрее. :wink:


В предыдущих примерах написано тоже самое, только вместо твоего fn = "", пишут len(fn)>0. Умные дядьки говорят, что сравнение длины строк. переменной с нулем работает быстрее, чем сравнение строк. переменной с пустой строкой... :)
Главное двигаться не быстрее, чем думает твоя голова.

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

Сообщение RayShade » 20.06.2003 (Пт) 9:54

Кхм... Уважаемые, а не почитать ли Вам Правила на тему повторения чужих постингов? ;)

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 20.06.2003 (Пт) 13:10

Господа!
Не используйте FSO. Он глючит под NT 4.0.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 20.06.2003 (Пт) 13:24

Александр Андреев писал(а):Господа!
Не используйте FSO. Он глючит под NT 4.0.

и вобще для таких элементарных вещей, как определение существования файла (и даже поиск файлов по маске, хотя это уже не совсем элементарно :) ), встроенных функций языка хватает с головой.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

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

Сообщение GSerg » 21.06.2003 (Сб) 6:12

RayShade писал(а):Alas, он не быстрее :) Потому что придется еще преобразовать (coerce) Int к Bool :)


:)

Код: Выделить всё
Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Form_Load()
  Dim t As Long, vbnsRes  As Long, vbquRes As Long, vbGreater As Long, vbJust As Long, i As Long
 
  Dim tmpStr As String, tmp As Long
  Const Times As Long = 10000000
 
  tmpStr = "any stupid string to test"
 
  t = GetTickCount
  For i = 1 To Times
    If tmpStr <> vbNullString Then tmp = tmp + 1
  Next
  vbnsRes = GetTickCount - t
 
  tmp = 0
  t = GetTickCount
  For i = 1 To Times
    If tmpStr <> "" Then tmp = tmp + 1
  Next
  vbquRes = GetTickCount - t
 
  tmp = 0
  t = GetTickCount
  For i = 1 To Times
    If Len(tmpStr) > 0 Then tmp = tmp + 1
  Next
  vbGreater = GetTickCount - t
 
  t = GetTickCount
  For i = 1 To Times
    If Len(tmpStr) Then tmp = tmp + 1
  Next
  vbJust = GetTickCount - t
 
  MsgBox "Сравнение с vbNullString " & vbnsRes & vbNewLine & _
         "Сравнение с """"" & vbTab & vbquRes & vbNewLine & _
         "Больше нуля" & vbTab & vbGreater & vbNewLine & _
         "Просто так" & vbTab & vbJust _
         , , FormatNumber$(Times, 0) & " раз"
 
End Sub


Сравнение с vbNullString 2016
Сравнение с "" 1905
Больше нуля 1965
Просто так 1885

:wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 117

    TopList