Windows 7 insiste en que la carpeta no existe cuando existe
Frecuentes
Visto 702 equipos
2
Lea toda la publicación ya que toda la publicación es relevante.
Escribí este código C#:
static void DumpDir(string dir)
{
string[] subdirs = Directory.GetDirectories(dir);
foreach (string subdir in subdirs)
{
DumpDir(subdir);
}
string[] files = Directory.GetFiles(dir);
}
static void Main(string[] args)
{
string startdir = @"G:\multimedia_dump";
dirindexstart = startdir.Split('\\').Length;
string[] dirs = Directory.GetDirectories(startdir);
foreach (string dir in dirs)
{
DumpDir(dir);
}
}
Abre un directorio codificado de forma rígida y recorre todos sus subdirectorios de forma recursiva. Eso es todo lo que hace. Eso es.
Sin embargo, falla en una carpeta en particular:
Observe cómo este no es el directorio inicial. Observe cómo, si sigue el código, debe derivarse lógicamente de una de las llamadas a Directory.GetDirectories(). Este nombre de carpeta no fue mal generado. Es real.
No solo es real, sino que puedo navegar hasta él en la GUI de Explorer:
Por extraño que parezca, si navega a la carpeta en CMD, se mostrará en DIR, pero si presiona TAB hasta que obtenga una sugerencia para el nombre de la carpeta, no le permitirá acceder al CD. Publicaría un tercer enlace, pero esto no me deja porque soy nuevo.
¿Lo que da? Creo que el software que generó esta carpeta lo hizo mediante una llamada NTFS de bajo nivel de algún tipo. ¿Hay alguna manera de desinfectar programáticamente estos nombres de carpetas o evitar este error para que pueda acceder a las carpetas que existen pero no deberían?
3 Respuestas
1
Parece que tu ruta contiene un |
. Este es un carácter ilegal, en lo que respecta a las API normales de Win32, pero no en lo que respecta a las API de NT.
Puede deshabilitar algunas limitaciones de la ruta de Win32 (por ejemplo, la longitud máxima de la ruta de ~260 caracteres) prefijando la ruta con \\?\
, pero parece que esto no incluye |
.
Así que probablemente necesites bajar a la API de NT para lidiar con esto.
contestado el 03 de mayo de 12 a las 21:05
1
¿Hay un espacio al final de ese nombre de directorio? Parece que hay en tu toma de Explorer. No creo que eso esté permitido, algunas herramientas probablemente estén recortando el espacio en blanco, y eso es lo que está causando su falta de coincidencia.
contestado el 03 de mayo de 12 a las 21:05
Sí, creo que es el espacio al final. Mira el primer mensaje de error. El espacio ha sido recortado - Steve
0
Encontré una solución que funciona para desinfectar los nombres, pero debes hacerlo antes de editarlos. Si usa ROBOCOPY los archivos, eliminará los caracteres ilegales de los nombres de archivos y carpetas.
Respondido 03 Jul 13, 19:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# windows-7 file-io or haz tu propia pregunta.
Hay un
|
en ese nombre de carpeta? - CodesInChaosPensé que era el cursor, y el nombre del directorio terminaba con un espacio. - David Yaw