-
Jan 26th, 2018, 12:26 PM
#1
Thread Starter
Addicted Member
Scanning Files - "Access Denied"
Hello
i am getting a access denied when recursive searching a hard-drive some files get a access denied even with my app running as admin is there any other ways to test and check if file is locked or if a file is in use by another program so i do not get access denied thanks?
Code:
Public Function IsFileInUse(ByVal Path As String) As Boolean
Try
Dim f As FileStream = File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.None)
f.Close()
f.Dispose()
f = Nothing
Catch ex As Exception
Return True
End Try
End Function
This is my log file results
Code:
Error Type: UnauthorizedAccessException
Error Msg: Access to the path 'C:\WINDOWS\WinSxS\poqexec.log' is denied.
Location: Module1.DeleteFiles
On Line: 1027
Date/Time: 1/26/2018 12:25:55 PM
================================================
Error Type: UnauthorizedAccessException
Error Msg: Access to the path 'C:\ProgramData\Microsoft\Windows\AppRepository\edb.chk' is denied.
Location: Module1.DeleteFiles
On Line: 1027
Date/Time: 1/26/2018 12:25:55 PM
================================================
Error Type: UnauthorizedAccessException
Error Msg: Access to the path 'C:\Users\All Users\Microsoft\Windows\AppRepository\edb.chk' is denied.
Location: Module1.DeleteFiles
On Line: 1027
Date/Time: 1/26/2018 12:25:55 PM
================================================
-
Jan 26th, 2018, 02:50 PM
#2
Re: Scanning Files - "Access Denied"
You just can't access some files. Or at least, you can't get to them as simply as "being administrator". These are generally files that belong to Windows and are extremely important, so you shouldn't touch them.
So any algorithm that inspects arbitrary file trees must handle UnauthorizedAccessException in an appropriate manner. For your program, you might just keep a list of file paths you scanned but couldn't access so the user can take a manual action, if needed.
The function you posted seems like it does that. It treats an UnauthorizedAccessException as if the file is locked/in use, which is probably appropriate given that it seems to be called by a method named "DeleteFiles()". You can't delete a file you can't open.
This answer is wrong. You should be using TableAdapter and Dictionaries instead.
-
Jan 26th, 2018, 07:41 PM
#3
Re: Scanning Files - "Access Denied"
First turn strict on. I think I previously remember you been coding for years, correct? You really need to start off with basics. Your function is pointless. Your function is of Boolean. So returns true or false. A function standard I follow has One exit. a few points I use to tell what has locked a file.
RmStartSession function
RmEndSession function
RmRegisterResources function
RmGetList function
great resource, http://www.pinvoke.net
-
Jan 28th, 2018, 12:23 PM
#4
Thread Starter
Addicted Member
Re: Scanning Files - "Access Denied"
Correct i have been coding for years in realbasic yea VB no here is the same question i asked 7 years ago in RB
http://forums.realsoftware.com/viewt...ilit=fileinuse
But i am going by the Visual Basic language reference.
https://msdn.microsoft.com/en-us/lib...code-snippet-2
Code:
' Catch the IOException generated if the
' specified part of the file is locked.
Catch ex As IOException
Console.WriteLine( _
"{0}: The write operation could " & _
"not be performed because the " & _
"specified part of the file is " & _
"locked.", ex.GetType().Name)
End Try
Code:
Public Function IsFileInUse(ByVal Path As String) As Boolean 'boolean is false by default
Try
Dim f As FileStream = File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.None)
f.Close()
f.Dispose()
f = Nothing
Catch ex As IOException
Return True
MsgBox(ex.GetType().Name)
End Try
End Function
now this code will give me a UnauthorizedAccessException beause it is locked now if i try to test it with the IsFileInUse code above says its not locked!
===================================
Code:
Dim path As String = "C:\WINDOWS\WindowsUpdate.log"
If IsFileLocked(path) Then
'wait for results this is a test
End If
Code:
Public Function IsFileLocked(ByVal Path As String) As Boolean
Try
Dim f As FileStream = File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.None)
f.Close()
f.Dispose()
f = Nothing
File.Delete(Path)
Catch ex As UnauthorizedAccessException
MsgBox(ex.GetType().Name)
Return True
End Try
End Function
Last edited by sinner0636; Jan 28th, 2018 at 04:18 PM.
-
Jan 28th, 2018, 01:00 PM
#5
Thread Starter
Addicted Member
Re: Scanning Files - "Access Denied"
I figured it out with readwrite an a boolean like to see your code though your prob talking about the (CreateFile API) right? !
http://vbnet.mvps.org/index.html?cod...file_inuse.htm
Code:
Dim path As String = "C:\WINDOWS\WindowsUpdate.log"
If IsFileInUse(path) Then
MsgBox("File in use")
Else
MsgBox("File not in use")
End If
Code:
Public Function IsFileLockedByVal Path As String) As Boolean
If File.Exists(Path) Then
Try
Dim F As Short = CShort(FreeFile())
FileOpen(F, Path, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
FileClose(F)
Catch ex As UnauthorizedAccessException
Return True
End Try
End If
End Function
Public Function IsFileInUse(ByVal Path As String) As Boolean
If File.Exists(Path) Then
Try
Dim f As FileStream = File.Open(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
f.Close()
f.Dispose()
f = Nothing
Catch ex As UnauthorizedAccessException
Return True
End Try
End If
Last edited by sinner0636; Jan 29th, 2018 at 07:33 AM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|