Como hago para obiar el error "Acceso denegado a la ruta de acceso 'G:\System Volume Information\'.", si deseo buscar un archivo que se encuentra en la unidad "G:\"
Try
If rdbuscar.Checked = True Then
a = InputBox("Escriba el nombre del archivo a buscar", "Ingrese Datos")
My.Forms.buscando.Show()
For Each b As String In My.Computer.FileSystem.GetFiles("G:\", FileIO.SearchOption.SearchAllSubDirectories, a)
TextBox1.Text = b
acu = b
If rdbfilestream.Checked = True Then
filestren()
My.Forms.buscando.Close()
Exit For
End If
If rdbstreamreader.Checked = True Then
streanreader()
My.Forms.buscando.Close()
Exit For
End If
Next
End If
If rdlistar.Checked = True Then
opc.ShowDialog()
TextBox1.Text = opc.FileName
acu = opc.FileName
If rdbfilestream.Checked = True Then
filestren()
End If
If rdbstreamreader.Checked = True Then
streanreader()
End If
End If
Catch ex As Exception
End Try
Puedes probar antes de esa línea en cuestión:
Directory.Exists(path).
Siendo Path la ruta "G:\", debería retornar false si no existe.
Unos consejos:
- Corrige las faltas de ortografía, por ejemplo la palabra STREAM en los nombres de variable.
- Es mejor si en la etiqueta code le le pones el lenguaje en adecuado, en este caso vbnet. Quedaría así [code=vbnet][/code]
- Utiliza camel case o pascal case.
Un saludo!
gracias [D4N93R] pero lo que sucede es que el archivo si existe pero cuando el algoritmo esta en plena busqueda sin antes encontrar el archivo me bota el error "Acceso denegado a la ruta de acceso 'G:\System Volume Information\'." como podria evitar dicho error gracias de antemano
el error aparece en este lugar del codigo:
For Each b As String In My.Computer.FileSystem.GetFiles("G:\", FileIO.SearchOption.SearchAllSubDirectories, a)
Ahh!! lo que pasa es que no tienes acceso a ese directorio :P
Uhm, Intenta usar DirectoryInfo.GetFiles en vez de y.Computer.FileSystem.GetFiles
Y no deber'ia dar error, a menos de que hagas algo con ese file que no tienes permisos.
Inténtalo y dime que tal.
Cita de: Choclito en 5 Noviembre 2010, 01:12 AM
Como hago para obiar el error "Acceso denegado a la ruta de acceso 'G:\System Volume Information\'.", si deseo buscar un archivo que se encuentra en la unidad "G:\"
El code que utilizas, no solamente te dara errores con esa carpeta, si alguna vez existe alguna otra que este cifrada puede fallar toda la búsqueda que realizes, un modo de solucionarlo es listando primero los directorios de la ruta que escogas, debes hacerlo con:
SearchOption.TopDirectoryOnly
luego con un foreach los recorres y haces un:
GetFiles
con
SearchOption.AllDirectories
a cada uno de los directorios encontrados, siempre utilizando try - catch.
De ese modo puedes solucionar tu problema, de igual modo puede evitarse problemas con algun directorio o archivo inaccesible aplicando este método de una formas mas elaborada.
Sí, un método recursivo con lo que te dice 43H4FH44H45H4CH49H56H45H sería buena implementación.
que SO es? vista? win7? si es así es posible que ocupes crearte un archivo manifest, es que en vista y posteriores la segridad se trata diferente...para comprobar lo dicho ejecuta como administrador tu aplicación o abre el VS como administrador y ejecuta tu código y si es por eso podrás acceder al archivo sin problemas.
Mira aquí:
http://stackoverflow.com/questions/1815228/c-do-i-need-manifest-files
esto tal vez esto te sirva:
http://msdn.microsoft.com/en-us/library/xhctdw55.aspx
Gracias 43H4FH44H45H4CH49H56H45H y [D4N93R]. Pero no se si me podrian ayudar a implementarlo en el codigo, si pude entenderles pero no se como implementarlo porfavor ayudenme es eso gracias.
De pasada:
Imports System.IO
Module Module1
Sub Main()
Dim dirInfo As New DirectoryInfo("F:\\")
Dim dirsInfo() As DirectoryInfo = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)
For Each di As DirectoryInfo In dirsInfo
Try
Console.WriteLine(di.FullName)
Dim filesInfo() As FileInfo = di.GetFiles("*.*", SearchOption.AllDirectories)
For Each fi As FileInfo In filesInfo
Console.WriteLine(fi.FullName)
Next
Catch ex As Exception
Console.WriteLine(ex.ToString())
Console.Read()
End Try
Console.Read()
Next
Console.Read()
End Sub
End Module
Puse varios Console.Read() para que pueda verse en la consola el directorio que se estas listando y si hay alguno que no sea accesible.
Saludos :P
Gracias 43H4FH44H45H4CH49H56H45H es una gran ayuda la tuya pero ahora mi gran problema es que tu codigo me muestra las carpetas que contienen el error como podria implementarlo para que me obie dicho error. Porfavor soy nuevo en esta cituacion espero me entiendan ahi les mando todo el codigo:
(http://www.4shared.com/photo/XqjGPTbu/Captura.html)
Imports System.IO
Imports System.Text
Public Class Form1
Dim a, c, acu
Private Shared Sub add(ByVal g As FileStream, ByVal value As String)
Dim f As Byte() = New UTF8Encoding(False).GetBytes(value)
g.Write(f, 0, f.Length)
End Sub
Sub filestren()
Try
Dim fs As New FileStream(acu, FileMode.Open, FileAccess.Read)
Dim datos(1024) As Byte
Dim enc As New System.Text.UTF8Encoding
Dim texto As New System.Text.StringBuilder
While fs.Read(datos, 0, 1024) > 0
texto.Append(enc.GetString(datos))
RichTextBox1.Text = enc.GetString(datos)
End While
fs.Close()
Catch ex As Exception
End Try
End Sub
Sub streanreader()
Dim a As String = (acu)
Try
Using f As StreamReader = File.OpenText(a)
Dim c As String
c = f.ReadLine()
While Not c Is Nothing
RichTextBox1.Text = c
c = f.ReadLine()
End While
f.Close()
End Using
Catch ex As Exception
End Try
End Sub
Sub filestreanescritura()
Dim a As String = acu
If File.Exists(a) Then
File.Delete(a)
End If
Dim b As FileStream = File.Create(a)
add(b, acu1)
RichTextBox1.Text = acu1
b.Close()
End Sub
Sub streanwrite()
Dim a As String = (acu)
Using b As StreamWriter = File.CreateText(a)
b.WriteLine(acu1)
RichTextBox1.Text = acu1
b.Close()
End Using
End Sub
Public Sub LlenarUnidades()
Dim Unidades(), Unidad As String
Unidades = Directory.GetLogicalDrives
For Each Unidad In Unidades
ComboBox1.Items.Add(Unidad)
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Try
If rdbuscar.Checked = True Then
a = InputBox("Escriba el nombre del archivo a buscar", "Ingrese Datos")
If a = "" Then
MsgBox("Cadena vacia")
Else
My.Forms.buscando.Show()
For Each b As String In My.Computer.FileSystem.GetFiles(ComboBox1.Text, FileIO.SearchOption.SearchAllSubDirectories, a)
TextBox1.Text = b
acu = b
If rdbfilestream.Checked = True Then
filestren()
My.Forms.buscando.Close()
Exit For
End If
If rdbstreamreader.Checked = True Then
streanreader()
My.Forms.buscando.Close()
Exit For
End If
Next
End If
End If
If rdlistar.Checked = True Then
opc.ShowDialog()
TextBox1.Text = opc.FileName
acu = opc.FileName
If rdbfilestream.Checked = True Then
filestren()
End If
If rdbstreamreader.Checked = True Then
streanreader()
End If
End If
'Catch ex As Exception
'End Try
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
'Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
opc.Filter = "(*.txt)|*.txt|(*.doc)|*.doc|(*.pdf)|*.pdf|(*.log)|*.log|(*.inf)|*.inf|(*.ini)|*.ini"
LlenarUnidades()
End Sub
Dim acu1
Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
acu1 = InputBox("Escriba el texto a escribir en el archivo seleccionado", "Ingrese Datos ''FileStream''")
streanwrite()
End Sub
Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged
acu1 = InputBox("Escriba el texto a escribir en el archivo seleccionado", "Ingrese Datos ''StreamReader''")
filestreanescritura()
End Sub
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
RadioButton3.Enabled = True
RadioButton4.Enabled = True
End Sub
Private Sub rdbfilestream_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbfilestream.CheckedChanged
Button1.Enabled = True
End Sub
Private Sub rdbstreamreader_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbstreamreader.CheckedChanged
Button1.Enabled = True
End Sub
Private Sub rdbuscar_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbuscar.CheckedChanged
rdbfilestream.Enabled = True
rdbstreamreader.Enabled = True
ComboBox1.Enabled = True
End Sub
Private Sub rdlistar_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdlistar.CheckedChanged
rdbfilestream.Enabled = True
rdbstreamreader.Enabled = True
ComboBox1.Enabled = False
End Sub
End Class
Espero me ayuden gracias de antemano.