una tener palabras longitud length description descripcion debe cuantos contador caracteres caja c# .net bcl

c# - tener - meta description seo



¿Cuál es la cantidad máxima de caracteres o longitud para un directorio? (2)

¿Cuál es la cantidad máxima de caracteres que puede contener una ruta típica para un directorio cuando se usa C #?

Por ejemplo, C:/test/ tiene 7 caracteres de longitud, ¿cuál es la longitud máxima?


El máximo para MaxPath en CLR es de 260 caracteres

La cantidad máxima de caracteres está definida por MAX_PATH en la biblioteca de la API de Win32. Esta configuración es 260 y se utiliza esa misma configuración, codificada de forma rígida, dentro del CLR BCL. Es probable que un camino que alcance esa cantidad de caracteres cause problemas (ver más abajo). Este máximo es el máximo para los viejos FAT y FAT32.

A la inversa, el sistema de archivos NTFS, que se utiliza en la mayoría de las instalaciones de Windows de forma predeterminada, tiene un máximo de 32767 caracteres y admite Unicode (en una implementación en la que cada carácter puede ocupar 2 bytes, es decir, UCS-2, no UTF-32). Pero incluso en NTFS, un solo segmento de ruta no debe exceder los 255 caracteres. Si bien NTFS admite nombres de archivo muy largos, la mayoría de las aplicaciones, incluidas las aplicaciones .NET que se basan en System.IO , no podrán ver estos nombres de archivo.

¿Por qué 260 y no 256? Debido a que el especificador de la unidad, la primera barra diagonal inversa y el carácter final de terminación nula no son parte de las limitaciones de longitud. Puede obtener esta información para Windows usando GetVolumeInformation , que debe consultar para cada volumen individualmente (cada volumen puede tener un tamaño máximo diferente).

Asumí Windows. Linux y otros sistemas operativos pueden y serán diferentes. Desde Windows 10, compilación 1607, este límite se ha eliminado, consulte a continuación para obtener más información.

Como consejo general, no debe confiar en ninguno de estos números. En su lugar, capture la excepción PathTooLongException si desea informar a los usuarios que la ruta es demasiado larga:

try { SetCurrentDirectory(longPath); } catch(PathTooLongException exc) { Console.WriteLine("The pathname was too long"); }

Nota: el código anterior se lanzará cuando exceda los 260 caracteres, que es el límite que el CLR le impone. Este no es el límite real (ver primer párrafo).

Como un aparte en .NET

Microsoft ha confirmado que es un problema con la (s) implementación (es) actual (es) de .NET que usted no puede descubrir de manera confiable cuál es el tamaño máximo de la ruta como lo admite CLR. Si desea obtener esta información mediante programación, use la propiedad Path.MaxPath . Sin embargo, la propiedad es internal que significa que solo puede acceder a ella a través de la reflexión y que no puede garantizar que funcionará en todas las versiones o en otras implementaciones de BCL (Mono):

// reflection FieldInfo maxPathField = typeof(Path).GetField("MaxPath", BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic ); // invoke the field gettor, which returns 260 int MaxPathLength = (int) maxPathField.GetValue(null);

Nota: esto le proporciona la ruta máxima que utiliza la implementación .NET de Microsoft. Hay un valor diferente en el BCL para el tamaño máximo del directorio, Path.MAX_DIRECTORY_PATH, pero incluso dentro del BCL esto nunca se usa. Si alguna vez creas un directorio igual a este tamaño, no podrás colocar ningún archivo dentro de ese directorio. Peor aún, solo abrirlo generará un error (debido a los alias de semi-directorio obligatorios . Y .. , lo que hace que muchas API se bloqueen).

ACTUALIZACIÓN: a partir de Windows 10 Build 1607 puede eliminar el límite a través de OptIn en el Registro:

A partir de Windows 10, versión 1607, se eliminaron las limitaciones de MAX_PATH de las funciones comunes de archivos y directorios de Win32. Sin embargo, debe optar por el nuevo comportamiento.

Una clave de registro le permite habilitar o deshabilitar el nuevo comportamiento de ruta larga. Para habilitar el comportamiento de ruta larga, establezca la clave de registro en HKLM/SYSTEM/CurrentControlSet/Control/FileSystem LongPathsEnabled (Type: REG_DWORD).

Más información está en la entrada actualizada en MSDN , aproximadamente a la mitad.