Удаление файла в VBA

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

114
задан 5 revs, 4 users 67% 28 December 2015 в 08:07
поделиться

7 ответов

1.) Проверка здесь . В основном сделайте это:

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

я предоставлю Вам право выяснять различную необходимую обработку ошибок, но это среди вещей обработки ошибок, которые я рассмотрел бы:

  • Проверка на передаваемую пустую строку.
  • Проверка на строку, содержащую символы, недопустимые в имени файла / путь

2.), Как Удалить Файл. Взгляд это. В основном используют команду Kill, но необходимо допускать возможность файла, являющегося только для чтения. Вот функция для Вас:

Sub DeleteFile(ByVal FileToDelete As String)
   If FileExists(FileToDelete) Then 'See above          
      ' First remove readonly attribute, if set
      SetAttr FileToDelete, vbNormal          
      ' Then delete the file
      Kill FileToDelete
   End If
End Sub

Снова, я оставлю обработку ошибок Вам, и снова это вещи, которые я рассмотрел бы:

  • это должно вести себя по-другому для каталога по сравнению с файлом? Пользователю, должно быть, придется явно указать, что они хотят удалить каталог?

  • Вы хотите, чтобы код автоматически сбросил атрибут "только для чтения", или пользователю нужно дать своего рода признак, что атрибут "только для чтения" установлен?

<час>

РЕДАКТИРОВАНИЕ: Отмечание этого ответа как сообщество Wiki, таким образом, любой может изменить его в случае необходимости.

159
ответ дан 5 revs, 3 users 88% 24 November 2019 в 02:32
поделиться

Альтернативный способ кодировать ответ Brettski, с которым я иначе соглашаюсь полностью, мог бы быть

With New FileSystemObject
    If .FileExists(yourFilePath) Then
        .DeleteFile yourFilepath
    End If
End With

Тот же эффект, но меньше (хорошо, ни один вообще) объявления переменной.

FileSystemObject является действительно полезным инструментом и определенно стоящий получения дружественным по отношению к. Кроме чего-либо еще, для текстового файла, пишущий это может на самом деле иногда быть быстрее, чем альтернатива прежней версии, которая может удивить несколько человек. (По моему опыту, по крайней мере, YMMV).

50
ответ дан Mike Woodhouse 24 November 2019 в 02:32
поделиться

Я буду, вероятно, гореться для этого, но какой смысл того, чтобы тестировать на существование, если Вы просто соберетесь удалить его? Один из моих главных главных объектов неприязни является приложением, бросающим ошибочное диалоговое окно с чем-то как, "Невозможно удалить файл, он не существует!"

On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.

, Если файл не существует во-первых, выполненная миссия!

13
ответ дан JohnFx 24 November 2019 в 02:32
поделиться

Следующее может использоваться, чтобы протестировать на существование файла, и затем удалить его.

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 
10
ответ дан Rich Adams 24 November 2019 в 02:32
поделиться

В VB обычно Dir для нахождения каталога файла. Если это не пробел тогда, это существует, и затем используйте Kill для избавлений от файла.

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If
6
ответ дан ZygD 24 November 2019 в 02:32
поделиться

устанавливает ссылку на Сценарии. Библиотека времени выполнения и затем использует FileSystemObject:

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if
5
ответ дан Brettski 24 November 2019 в 02:32
поделиться

Можно установить ссылку на Сценарии. Библиотека времени выполнения и затем использует FileSystemObject. Это имеет метод DeleteFile и метод FileExists.

См. статью MSDN здесь .

2
ответ дан Darrel Miller 24 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: