C sharp - c# copiar archivos con nombres largos mayores a 256 caracteres

 
Vista:
sin imagen de perfil

c# copiar archivos con nombres largos mayores a 256 caracteres

Publicado por perro (5 intervenciones) el 25/05/2022 00:15:59
Hola buenos buenas

prometi hacer un simple programa para hacer backups de unos archivos de bases de datos y las carpetas de un usuarios en la red
bueno la cosa se volvio mas larga de lo que esperado y tengo estas restricciones

* dotnet 3.5 maximo esta cosa tiene que correr desde maquina virtual con w7 de 32
* por lo mismo de lo anterior no puedo usar asi librerias modernas

ahora resulta que hay un mnton de carpetas anidadad con longnames, al tratar de copiarlos en c# no me funciona,
Internet dice que le tengo que poner @"\\?\" al principio del path pero no me da
asi que escribi una funcion para primero crear una carpeta con un nombre largo y asi entender que es lo que esta pasando

<code>
//################################################################
public static void Main(string[] args){
//no mostrar ventana de cmd mientras se ejecuta
IntPtr hwnd;
hwnd = GetConsoleWindow();

//imprimir en pantalla
System.Console.WriteLine("hula mundox");


long_named_folder(@"Z:\C#\copiador\megaCopia\longnamedfolder", 260);

//recojer texto de la consola
string val = Console.ReadLine();
} //Main

//################################################################
//################################################################
public static void long_named_folder(string path, int l){
//log_this( string.Format( "pp robocopy {0})", attributos ) );
//long file means 260 chars of more
//longnamedfolder
//"lngname000"

int path_length = 0;
path_length = path.Length;

while( path_length <= l ){
path += @"\longname";

path_length = path.Length;
//path_length += 3;

path += "" + path_length;
}

path = path.Substring(0, l);
path = @"\\?\" + path;

Console.WriteLine(path);
Console.WriteLine("Longitus = " + l);

Directory.CreateDirectory(path); //crear la carpeta con el nombre largo
}
<code>

la salida de la consola

<code>
hula mundox
\\Z:\C#\copiador\megaCopia\longnamedfolder\longname49\longname60\longname71\longname82\longname93\longname104\longname116\longname128\longname140\longname152\longname164\longname176\longname188\longname200\longname212\longname224\longname236\longname248\longname
Longitus = 260

</code>

muestra esto en la consola se atasca y se cierra sin dejarme ver el error que probablemente es algun path name too long

####
o esto es un error por la forma de declarar el nombre de la carpeta o definitivamente c# 3.5 no puede con los nombres largos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 7
Ha aumentado 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

c# copiar archivos con nombres largos mayores a 256 caracteres

Publicado por Ismael (10 intervenciones) el 25/05/2022 13:22:57
No Estaría mal poner un try catch para capturar el error y así saber bien el error.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

c# copiar archivos con nombres largos mayores a 256 caracteres

Publicado por perro (5 intervenciones) el 27/05/2022 21:33:03
System.IO.PathTooLongException: La ruta de acceso especificada o el nombre de archivo (o ambos) son demasiado largos. El nombre de archivo completo debe ser inferior a 260 caracteres y el nombre del directorio debe ser inferior a 248.
en System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)
en System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
en System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity)
en long_file.Program.long_named_folder(String path, Int32 l)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar