"modificar" el tamaño de un archivo

Iniciado por CH4ØZ, 22 Julio 2010, 04:57 AM

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

CH4ØZ

bueno de nuevo yo con mis preguntas :p

bueno la pregunta es como puedo con el vb crear o modificar el tamaño de un archivo pero no el original, si no fingir de cierta forma el tamaño del mismo. Digamos hacer que un archivo de 10Mb aparente pesar 500Mb.

bueno si es esto posible me gustaria que alguien me dijera como o alguna pista ya que no logro encontrar nada sobre el tema con mi amigo google :S
no me juzguen si no me conocen

Fitoschido

SI se puede

Código (vb) [Seleccionar]
Shell cmd.exe fsutil file createnew "C:\archivo2GB.dat" 2147483648

Eso ejecutara al CMD y hara un archivo vacio que pesa 2 GB!!

Saludos
El que sabe hace, el que no enseña


Miembro oficial del proyecto Ubuntu, traductor de LibreOffice/Ubuntu/Xfce/Gnome.

raul338

Cita de: Fitoschido en 22 Julio 2010, 05:18 AM
Código (vb) [Seleccionar]
Shell cmd.exe fsutil file createnew "C:\archivo2GB.dat" 2147483648

No seria asi?

Código (vb) [Seleccionar]
Shell "cmd.exe fsutil file createnew ""C:\archivo2GB.dat"" 2147483648"

:P

BlackZeroX

#3
error es asi

Código (vb) [Seleccionar]


On Error Resume Next
Dim Res         As Long
   Res = Shell("cmd.exe /c fsutil file createnew ""C:\archivo2GB.dat"" 2147483648", vbHide)
   If Res Then
       Call MsgBox("Todo Correcto")
   Else
       Call MsgBox("Error en Comando")
   End If



Le he metido un poco de mi ser!¡.

Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

Fitoschido

Cierto, gracias por la ayuda Raul y blackZeroX, lo que pasa es que andaba escribiendo con prisa y se me olvida la sintaxis :P, y me da flojera abrir el VB :xD
El que sabe hace, el que no enseña


Miembro oficial del proyecto Ubuntu, traductor de LibreOffice/Ubuntu/Xfce/Gnome.

seba123neo

aca tenes el equivalente con api's, SetFilePointer...

Código (vb) [Seleccionar]
Option Explicit

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long

Private Const FILE_BEGIN = 0
Private Const CREATE_NEW = 1
Private Const INVALID_HANDLE_VALUE = -1
Private Const GENERIC_WRITE = &H40000000

Public Sub SetFileSize(ByVal FileName As String, ByVal newSize As Long)
    Dim fileHandle As Long
   
    fileHandle = CreateFile(FileName, GENERIC_WRITE, 0&, ByVal 0&, CREATE_NEW, 0&, 0&)
   
    If fileHandle = INVALID_HANDLE_VALUE Then
        Err.Raise 53
    End If
   
    If SetFilePointer(fileHandle, newSize, 0&, FILE_BEGIN) = -1 Then
        CloseHandle fileHandle
        Err.Raise 5
    End If
   
    If SetEndOfFile(fileHandle) = 0 Then
        CloseHandle fileHandle
        Err.Raise 5
    End If
   
    CloseHandle fileHandle
End Sub


Private Sub Form_Load()
    Call SetFileSize("c:\archivo.dat", &HEAC1361F)
End Sub


cuidado que crea un archivo de 3 gigas.. :xD

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

CH4ØZ

#6
gracias a todos
pero y si yo en vez de querer crear un nuevo archivo, quiero editar uno existente?
no me juzguen si no me conocen

BlackZeroX

Seria con las APIS casi como lo qué publico aquí Seba123Neo solo qué en lugar de usar el parámetro Create_New seria con OPEN_EXISTING, esto t lo digo al vuelo sin probar aun nada.
The Dark Shadow is my passion.

fary

Pues si lo que quieres es que el programa siga funcionando y pese mas tendras que utilizar Append y le añades todo el peso que quieras y el programa seguira funcionando igual...

salu2!
Un byte a la izquierda.

Sanlegas

Public Function sAddKBytes(sPath As String, lKb As Integer)
'Autor: Slek
'Objetivo: Añadir Bytes a un Archivo
'Nota, se añaden KiloBytes
'Ej: sAddBytes "C:\Test.exe", 2 '(Añade 2 KiloBytes)
Dim sKbyte As String
Dim i As Integer
Dim FF

FF = FreeFile

sKbyte = String(1024, vbNullChar)

Open sPath For Binary As #FF
For i = 1 To lKb
  Put #FF, LOF(FF) + 1, sKbyte
Next i
Close #FF
End Function


esa es una forma... hay bastantes para hacerlo  :laugh: