我正在寻找测试文件是否可写的最简单方法,以及它是否为只读以更改其访问权限以使其可写。
欢迎任何有正确方向的建议或指示!
答案 0 :(得分:3)
文件可能无法写入的原因有很多,例如:
您可以检查其中的一些,但唯一可以测试的方法是实际尝试打开文件进行编写。
您可以使用GetAttr和SetAttr函数查找并更改只读标记。
文件无法写入的某些原因根本无法修复(如CD-ROM上的文件),或者无法从程序中修复。如果用户帐户没有对该文件的写入权限,则它不太可能有权更改权限...
答案 1 :(得分:3)
使用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
答案 2 :(得分:-1)
'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