Cuando recursivo a través de algunas carpetas y archivos, encuentro este error:C# ¿Cómo puedo resolver las limitaciones cuando uso DirectoryInfo?
La ruta especificada, el nombre del archivo o ambos son demasiado largos. El nombre de archivo completo debe tener menos de 260 caracteres y el nombre de directorio debe tener menos de 248 caracteres.
Aquí es mi función
private void ProcessDirectory(DirectoryInfo di)
{
try
{
DirectoryInfo[] diArr = di.GetDirectories();
foreach (DirectoryInfo directoryInfo in diArr)
{
if (StopCheck)
return;
ProcessDirectory(directoryInfo);
}
ProcessFile(di);
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
TextBoxCurrentFolder.Text = di.ToString();
}
no puedo hacer que los nombres de los directorios más corto, porque no se me permite también, así que ... ¿Cómo puedo solucionar este problema?
Agregado: Aquí está la otra función:
private void ProcessFile(DirectoryInfo di)
{
try
{
FileInfo[] fileInfo = di.GetFiles();
if (fileInfo.LongLength != 0)
{
foreach (FileInfo info in fileInfo)
{
Size += info.Length;
CountFile++;
}
}
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
}
EDITAR Encontramos este donde utilizó Zeta largos caminos: How can I use FileInfo class, avoiding PathTooLongException?
lo han implementado y ahora voy a deje que el programa se ejecute durante la noche para ver si funciona.
EDIT Usé el ZetaLongPath ayer y funcionó de maravilla! Incluso pasó por carpetas que necesitaban permiso de acceso.
EDITAR En lugar de zetalongPath, he utilizado Delimon.Win32.IO.dll que creo que es mucho mejor. Tiene las mismas interfaces que Win32.
supongo que tienes que volver a la API normal de Windows (FindFirst */FindNext *) –
lo hace se produce el error desde el interior de 'ProcessFile()', tal vez que el código puede ser cambiado si podemos verlo? – musefan
¿Sabía que es el primero en la subcarpeta más profunda antes de comenzar a procesar los archivos? Si desea comenzar con la carpeta raíz, debe mover 'ProcessFile (di);' al inicio del método. –