Actualmente estoy trabajando con un código que implica guardar un archivo en un archivo definido por el usuario. Si el usuario ingresa un nombre de archivo sin extensión, el código detecta automáticamente la extensión según el tipo de archivo (almacenado internamente).¿Pueden existir espacios dentro de una extensión de archivo?
Sin embargo, estoy teniendo dificultades para determinar si el nombre de archivo pasado al código tiene una extensión o no. Estoy usando Path.HasExtension(filename)
y Path.GetExtension(filename)
pero parece mostrar un comportamiento extraño:
File.EXT
=>.EXT
es la extensión. Esto esta bien.
This Is A File.EXT
=>.EXT
es la extensión. Esto también está bien.
This Is A File. Not An Extension
=>. Not An Extension
es la extensión. Sin embargo, pensaría en esto como un archivo sin una extensión. Windows también lo piensa cuando creo un archivo con este nombre (la creación de un archivo con una extensión no reconocida hace que las ventanas lo llamen EXTENSIONNAME File
, mientras que los archivos sin una extensión como esta simplemente se llaman File
).
This Is A File.Not An Extension
=>.Not An Extension
es la extensión. Mismo problema que el anterior.
También tenga en cuenta que este mismo comportamiento es evidente en Path.GetFileNameWithoutExtension(filename)
(por ejemplo, informa que el nombre del archivo sin extensión en los últimos dos ejemplos es This Is A File
).
Así que lo que estoy tomando de esto es que .NET y Windows difieren en lo que piensan como una extensión.
La Pregunta: Me pregunto si está bien para mí para implementar el código como este:
if(!Path.HasExtension(filename) || Path.GetExtension(filename).Contains(" ")) {...}
ya que ello tirar de la definición de mi código de una extensión adecuada más de acuerdo con la forma en que Windows trata las cosas. ¿O hay algo que me falta aquí que explícitamente dice que debo permitir espacios en mis extensiones?
He buscado y encontrado this slightly similar question, pero los documentos allí vinculados solo especifican que no se recomienda finalizar la extensión con un espacio/período; no dicen nada sobre espacios dentro de la extensión.
Soy capaz de crear un archivo 'This Is A File. No es una extensión' que usa Windows 7 y Windows XP. Yo 'clic derecho en el escritorio, Nuevo, Documento de texto' para crear el archivo. ¿O estás hablando de crear el archivo usando .Net? –
@Thomas Puedo crear esos archivos con .NET o con Windows 7. Mi punto es que Windows no reconoce la extensión ".no una extensión" como la extensión del archivo, mientras que .NET sí lo hace. – NickAldwin