
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
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


0