Как вы делаете файл для записи в VB? - PullRequest
5 голосов
/ 15 апреля 2009

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

Любые предложения или указатели в правильном направлении приветствуются!

Ответы [ 3 ]

3 голосов
/ 15 апреля 2009

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

  • Это защищено от записи
  • Он находится на носителе только для чтения (например, на компакт-диске)
  • Учетная запись пользователя, используемая для запуска кода, не имеет доступа для записи в файл
  • Файл находится в общей папке, где запись не разрешена

Вы можете проверить некоторые из них, но единственный способ проверить это - попытаться открыть файл для записи.

Вы можете использовать функции GetAttr и SetAttr для поиска и изменения флага только для чтения.

Некоторые причины невозможности записи файла вообще не могут быть исправлены (например, файл на CD-ROM) или не могут быть исправлены из вашей программы. Если учетная запись пользователя не имеет разрешения на запись в файл, маловероятно, что у нее есть разрешение на изменение разрешений ...

3 голосов
/ 04 июня 2009

Использование GetAttr и SetAttr

Dim attributes As VbFileAttribute

attributes = GetAttr("C:\foo.txt")
If (attributes And vbReadOnly) Then
  attributes = attributes - vbReadOnly
  SetAttr "C:\foo.txt", attributes
End If

Использование FileSystemObject (требуется ссылка на проект в Microsoft Scripting Runtime)

Dim fso As New FileSystemObject
Dim fil As File

Set fil = fso.GetFile("C:\foo.txt")
If (fil.attributes And ReadOnly) Then
  fil.attributes = fil.attributes - ReadOnly
End If
0 голосов
/ 15 апреля 2009
'Getting and Setting File Attributes

Declare Function SetFileAttributes Lib "kernel32" _
 Alias "SetFileAttributesA" (ByVal lpFileName As _
 String, ByVal dwFileAttributes As Long) As Long
Declare Function GetFileAttributes Lib "kernel32" _
 Alias "GetFileAttributesA" (ByVal lpFileName As _
 String) As Long

Public Function GetAttributes(Filename As String, _
 Archive As Boolean, Hidden As Boolean, _
 ReadOnly As Boolean, System As Boolean)

    'Dimension and setup some variables.
    Dim Data As Long
    Archive = False: Hidden = False: ReadOnly = False

    'Get Data and check for success.
    Data = GetFileAttributes(Filename)
    If Data = 0 Then GetAttributes = 0 Else GetAttributes = 1

    'Work out what it is.
    If Data = 128 Then Exit Function
    If Data - 32 >= 0 Then Archive = True: Data = Data - 32
    If Data - 4 >= 0 Then System = True: Data = Data - 4
    If Data - 2 >= 0 Then Hidden = True: Data = Data - 2
    If Data - 1 >= 0 Then ReadOnly = True: Data = Data - 1

End Function

Public Function SetAttributes(Filename As String, _
Archive As Boolean, Hidden As Boolean, _
ReadOnly As Boolean, System As Boolean)

    'Dimension a Variable.
    Dim Data As Long

    'Work out what Data should be.
    Data = 0
    If Archive = True Then Data = Data + 32
    If Hidden = True Then Data = Data + 2
    If ReadOnly = True Then Data = Data + 1
    If System = True Then Data = Data + 4
    If Data = 0 Then Data = 128

    'Set the attributes and check for success.
    SetAttributes = SetFileAttributes(Filename, Data)

End Function
...