Crear una extensión punto Null

Iniciado por Flamer, 12 Septiembre 2016, 02:59 AM

0 Miembros y 1 Visitante están viendo este tema.

Flamer

hola estoy tratando de crear un archivo similar a este


http://www.mediafire.com/download/qyors7vpzr9atju/flamer.rar

es la foto de flamer le he borrado la extensión y lo remplace por puntos y cuando la descomprimen se crea el archivo flamer.....

y mi pregunta es como logro hacer el archivo flamer......    sin nesesidad del winrar y en un lenguaje de programación

intente esto en vb.net
Código (vbnet) [Seleccionar]

FileCopy("e:\flamer.jpg", "e:\flamer....")


pero nada

saludos


Eleкtro

#1
Cita de: Flamer en 12 Septiembre 2016, 02:59 AMcuando la descomprimen se crea el archivo flamer.....

Cuando se descomprime el archivo, el sistema operativo automaticamente le asigna el nombre de archivo "flamer" sin extensión (al menos en Windows 10), puesto que lo que pretendes hacer es una operación ilegal (en términos de nomenclaturas ilegales de archivos). El punto al final del nombre es el caracter que delimita el nombre de archivo de la extensión del archivo (logicamente), una extensión de archivo no puede contener un punto, o al menos no debería permitirse, como norma general.

No puedes hacer eso con .NET, al menos no usando código administrado, puesto que el algoritmo de la función de renombrado debería prevenir que lleves a cabo esa operación ilegal en el sistema de archivos de Windows.

Sin embargo, al parecer la API de Windows ignora algunas validaciones para crear estos archivos, puedes usar la sigueinte sintaxis "\\?\C:\Flamer..." por ejemplo al llamar a la función CreateFileA/CreateFileW:

Código (vbnet) [Seleccionar]
<DllImport("kernel32.dll", CharSet:=CharSet.Auto, BestFitMapping:=False, ThrowOnUnmappableChar:=True, SetLastError:=True)>
Public Shared Function CreateFile(<MarshalAs(UnmanagedType.LPTStr)> ByVal filename As String,
                                 <MarshalAs(UnmanagedType.U4)> ByVal access As FileAccess,
                                 <MarshalAs(UnmanagedType.U4)> ByVal share As FileShare,
                                 <MarshalAs(UnmanagedType.SysInt)> ByVal securityAttributes As IntPtr,
                                 <MarshalAs(UnmanagedType.U4)> ByVal creationDisposition As FileMode,
                                 <MarshalAs(UnmanagedType.U4)> ByVal flagsAndAttributes As FileAttributes,
                                 <MarshalAs(UnmanagedType.SysInt)> ByVal templateFile As IntPtr
) As SafeFileHandle
End Function

Dim handle As SafeFileHandle =
   CreateFile("\\?\C:\Flamer...", FileAccess.Write, FileShare.None, IntPtr.Zero, FileMode.CreateNew, FileAttributes.Normal, IntPtr.Zero)


No he comprobado a hacer esto con el resto de funciones Win32 MoveFile/MoveFileEx/CopyFile/CopyFileEx pero supongo que deberían permitir usar la misma sintaxis en los parámetros que tomen el nombre de archivo.

PD: No hace falta mencionar que el archivo será "irreconocible" por el Explorador de Windows o mejor dicho inborrable, y para borrarlo deberemos utilizar la misma sintaxis al especificar el nombre de archivo a borrar.

Saludos








Flamer

#2
yo lo puedo crear con winrar y borrar con el

para borrarlo del disco hago lo siguiente


E:\>rar m "prueba.rar" flamer...........

RAR 5.21   Copyright (c) 1993-2015 Alexander Roshal   15 Feb 2015
Trial version             Type RAR -? for help

Evaluation copy. Please register.

Creating archive prueba.rar

Adding    flamer...........                                           OK
Deleting flamer...........                 deleted
Done

E:\>


y adentro del rar le devuelvo la extensión

pero lo que quiero saber es como lo crea y lo borra el winrar

saludos flamer y si es inborrable

Eleкtro

#3
Cita de: Flamer en 12 Septiembre 2016, 05:57 AMpero lo que quiero saber es como lo crea y lo borra el winrar

Flamer, ¿has leido mi respuesta?, ahí te explico como, usando la sintaxis especial al llamar a la función CreateFile para crear el archivo y obtener el open-handle del archivo con el que luego escribir los datos en el stream (supongo), y para borrar el archivo llamando a DeleteFile usando en la sintaxis el prefijo especial que ya he mencionado ("\\?\"), la clave está en utilizar esa sintaxis en el parámetro de la función, de lo contrario las funciones mencionadas no reconocerían el archivo especificado.

Cita de: Flamery mi pregunta es como logro hacer el archivo flamer......    sin nesesidad del winrar y en un lenguaje de programación

Eso también ha quedado explicado, debes usar las funciones de la API de windows en lugar de utilizar las funciones built-in de la libreria de classes de .NET Framework, puesto que tienen métodos de validación que no te permitirán crear archivos que empiecen o acaben con un punto (ni utilizando la sintaxis especial).

Saludos...








Flamer

#4
Cita de: Eleкtro en 12 Septiembre 2016, 06:18 AM
Flamer, ¿has leido mi respuesta?, ahí te explico como, usando la sintaxis especial



Hola Elecktro perdón es que modificaste el mensaje y no me fije bien jajaja

no es necesaria la api funciona desde el ms-dos con el comando ren y el copy

asi


E:\>copy /b flamer.png  \\?\E:\Flamer...
       1 archivo(s) copiado(s).

E:\>ren "\\?\E:\Flamer..."  "Flamer2.png"



saludos flamer y gracias