Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, существует ли файл? / 11 сообщений из 11, страница 1 из 1
16.09.2005, 09:15
    #33272558
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?

Пишу прогу на VBA в Word'e. Как определить существует ли указанный файл на диске?


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
16.09.2005, 09:21
    #33272574
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
Dir()
...
Рейтинг: 0 / 0
16.09.2005, 09:24
    #33272585
Как узнать, существует ли файл?
Код: plaintext
1.
2.
3.
4.
    If Dir("d:\1\test.txt") <> "" Then
        MsgBox "Файл существует."
    Else
        MsgBox "Файл НЕ существует."
    End If
...
Рейтинг: 0 / 0
16.09.2005, 09:58
    #33272664
Jetus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?


Спасибо!

______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.02.2007, 15:30
    #34316277
Vredinka-net
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
и от меня спасибо!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.11.2012, 13:07
    #38059615
Как узнать, существует ли файл?
И от меня спасибо)))
...
Рейтинг: 0 / 0
18.10.2013, 16:11
    #38433101
Как узнать, существует ли файл?
И от меня спасибо!
...
Рейтинг: 0 / 0
18.10.2013, 16:33
    #38433142
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
If Len(Dir("d:\1\test.txt")) <> 0 Then - говорят быстрее будет
...
Рейтинг: 0 / 0
10.06.2014, 04:12
    #38665836
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
Пользователь2
Код: vbnet
1.
    If Dir("d:\1\test.txt") <> "" Then...


катастрофаIf Len(Dir("d:\1\test.txt")) <> 0 Then

Ага, 5 лет пользовался.
И наконец напоролся:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Command1_Click()
  If (Len(Dir(App.Path & "\TestFolder\testfile.txt", vbNormal)) > 0) Then
    ShellDeleteFileFolder App.Path & "\TestFolder", _
     False, True, False, False
     'и хрен ты эту папку удалишь после такой Dir-проверки!!!
  End If
End Sub


вместо ShellDeleteFileFolder можно поставить MsgBox и попытаться удалить ручками
Но если кому интересно - то под спойлером - ф-ция удаляет файл или папку со всем содержимым
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
Option Explicit

'Shell Structures

'wFunc - A value that indicates which operation to perform
Public Const FO_MOVE = &H1
Public Const FO_COPY = &H2
Public Const FO_DELETE = &H3
Public Const FO_RENAME = &H4

'fFlags - Flags that control the file operation
'Preserve undo information, if possible (класть в корзину)
Public Const FOF_ALLOWUNDO = &H40
'Respond with Yes to All for any dialog box that is displayed
Public Const FOF_NOCONFIRMATION = &H10
'Do not ask the user to confirm the creation of a new directory if required
Public Const FOF_NOCONFIRMMKDIR = &H200
'Do not copy the security attributes of the file.
'The destination file receives the security attributes of its new folder.
Public Const FOF_NOCOPYSECURITYATTRIBS = &H800
'Do not display a dialog to the user if an error occurs.
Public Const FOF_NOERRORUI = &H400
'Do not display a progress dialog box.
Public Const FOF_SILENT = &H4
'Display a progress dialog box but do not show individual file names as they are operated on.
Public Const FOF_SIMPLEPROGRESS = &H100
'Windows Vista. Perform the operation silently, presenting no UI to the user.
Public Const FOF_NO_UI = FOF_SILENT Or FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or FOF_NOERRORUI
 
Public Type SHFILEOPSTRUCT
  hwnd As Long
  wFunc As Long
  pFrom As String
  pTo As String
  fFlags As Integer
  fAnyOperationsAborted As Boolean
  hNameMappings As Long
  lpszProgressTitle As String
End Type

'Shell Functions
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
 (lpFileOp As SHFILEOPSTRUCT) As Long
'

Public Function ShellDeleteFileFolder(ByVal strSource As String, _
 Optional ByVal bSilent As Boolean = True, _
 Optional ByVal bNoConfirm As Boolean = True, _
 Optional ByVal bNoShowErrors As Boolean = True, _
 Optional ByVal bAllowUndo As Boolean = False) As Boolean
  'bSilent - не показывать диалог удаления
  'bNoConfirm -не задавать пользователю лишних вопросов
  'bNoShowErrors -не выводить диалоги про ошибки
  'bAllowUndo -класть в корзину
 
  Dim SHFileOp As SHFILEOPSTRUCT  ' structure To pass To the Function
  Dim dwRes As Long
  
  'коррекция
  strSource = InCorrectDir(strSource) 'убираем "\" на конце
  
  With SHFileOp
    .wFunc = FO_DELETE
    .pFrom = strSource
    If bSilent Then .fFlags = .fFlags Or FOF_SILENT
    If bNoConfirm Then .fFlags = .fFlags Or FOF_NOCONFIRMATION
    If bNoShowErrors Then .fFlags = .fFlags Or FOF_NOERRORUI
    If bAllowUndo Then .fFlags = .fFlags Or FOF_ALLOWUNDO
  End With

  dwRes = SHFileOperation(SHFileOp)
  'If dwRes <> 0 Then Debug.Print "SHFileOperation Error " & CStr(dwRes)

  ShellDeleteFileFolder = (dwRes = 0)

End Function

Public Function InCorrectDir(the_str As String) As String
  'здесь наоборот удаляем крайний слэш!
  If (Right(the_str, 1) = "\") Then
    InCorrectDir = Left(the_str, Len(the_str) - 1)
  Else
    InCorrectDir = the_str
  End If
End Function



Не, решение конечно есть:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Command1_Click()
  If (Len(Dir(App.Path & "\TestFolder\testfile.txt", vbNormal)) > 0) Then
    Dir
    ShellDeleteFileFolder App.Path & "\TestFolder", _
     False, True, False, False
  End If
End Sub



Dir суко держит всю папку целиком пока не вернет пустую строку (и при таком подходе - до конца работы приложения).
А пустую строку(если шаблон - строго указанный файл) он вернет при следующем вызове -без параметров.

Попытаюсь ка я найти замену этому "методу".
...
Рейтинг: 0 / 0
10.06.2014, 05:27
    #38665837
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
Если без извращений, то думаю так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Declare Function PathFileExists Lib "Shlwapi.dll" Alias "PathFileExistsA" _
 (ByVal pszPath As String) As Boolean

Private Sub Command1_Click()
  If PathFileExists(App.Path & "\TestFolder\testfile.txt") Then
    ShellDeleteFileFolder App.Path & "\TestFolder", _
     False, True, False, False
  End If
End Sub


Кстати годится и для папки, хотя для папки я использовал другой метод.
...
Рейтинг: 0 / 0
11.02.2015, 22:12
    #38877444
STARK-D.2015
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, существует ли файл?
Можно сделать по-другому:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set FSO=CreateObject ("Scripting.FileSystemObject")
get_file = "Путь"
if FSO.FileExists(get_file) = true Then
MsgBox "Искомый файл существует"
Else
MsgBox "Искомого файла не найдено"
End if
Так, мне кажется, гораздо легче.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, существует ли файл? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]