powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, существует ли файл?
11 сообщений из 11, страница 1 из 1
Как узнать, существует ли файл?
    #33272558
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

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


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


Спасибо!

______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как узнать, существует ли файл?
    #34316277
Vredinka-net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и от меня спасибо!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как узнать, существует ли файл?
    #38059615
И от меня спасибо)))
...
Рейтинг: 0 / 0
Как узнать, существует ли файл?
    #38433101
И от меня спасибо!
...
Рейтинг: 0 / 0
Как узнать, существует ли файл?
    #38433142
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
If Len(Dir("d:\1\test.txt")) <> 0 Then - говорят быстрее будет
...
Рейтинг: 0 / 0
Как узнать, существует ли файл?
    #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
Как узнать, существует ли файл?
    #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
Как узнать, существует ли файл?
    #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
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать, существует ли файл?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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