Visual Basic - Borrar Bytes

Life is soft - evento anual de software empresarial
 
Vista:

Borrar Bytes

Publicado por CHicho (80 intervenciones) el 01/10/2008 22:57:24
Hola a todos, necesito su ayuda

Mi problema es que tengo un archivo al cual le tengo que borrar una parte, por ejemplo los ultimos 10 bytes, pero sin crear un nuevo archivo ni remplazando los bytes por el caracter 0.

me tiene que quedar el archivo sin los ultimos 10 bytes.
osea ocupar 10 byes menos

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Borrar Bytes

Publicado por Carlos (125 intervenciones) el 02/10/2008 00:05:29
¿Y cuál es el problema en crear uno nuevo, o sea una copia del original sin los últimos bytes que quieres borrarle?
Después de eso, solamente tienes que borrar el original y el archivo de copia lo renombras dándole el nombre original. No le veo mayor problema ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar Bytes

Publicado por Chicho (80 intervenciones) el 02/10/2008 05:00:14
Hola Carlos, Gracias por responder.

Te cuento mas o menos lo que estoy haciendo:

Para un programa que estoy haciendo necesito crear una base de datos que sea propia, es decir no una de accses o SQL, un nuevo tipo de base de datos diseñana por mi.

esto significa que para acceder a los datos se tiene que conocer la estructura de el archivo que contiene la base datos y futuramente pretendo agregarle la posibilidad de protejer con contraseña los datos. como toda base de datos tine la posibilidad de agregar, borrar o modificar registros.

En fin, para hacer esto utulize una clase, y parta borrar un registro de la forma que me propones tendria que modificar gran parte del codigo.

Ademas el archivo podria alcanzar un tamaño muy grande, y con el metodo que me propones se consigue un muy bajo rendimiento

Es por eso que plantie la pregunta..

...y si conoces o te enteras de alguna forma te lo agradeceria mucho si me lo comentaras

Chicho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar Bytes

Publicado por Carlos (125 intervenciones) el 02/10/2008 16:54:43
Ok, entonces hazle como el viejo Dbase III le hacía: en el lugar donde quieres que termine el archivo graba el caracter ASCII 26. a ver si te sirve.
Aunque, yo insisto en que intentaras haciendo una copia, borrando el original y renombrando la copia, si tu problema es por el tamaño del archivo de cualquier manera deberías probar, tal vez no tarde demasiado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Borrar Bytes

Publicado por Chicho (80 intervenciones) el 02/10/2008 18:28:38
Gracias de nuevo
no puedo hacer eso porque cada registro ocupa 46 Bytes y el ultimo byte del ultimo registro forma parte de un conjunto de 4 bytes que almacenar un valor del tipo long.
(La Base de Datos esta creada solo para un proposito y es el control de usuarios de mi programa)

Esta es la estructura:

2 Integer (Identificador del archivo)
2 Integer (Version del archivo)
2 Integer (Cantidad de datos)
x Datos

// DATOS
2 Integer (index)
16 String (Nombre)
16 String (Contraseña)
4 Long (Horas Acumuladas)
4 Long (Horas Usadas)
4 Long (Fecha)

Como Podras ver El ultimo byte podria tomar el valor del caracter que me propones.

De todas formas encontre como se podria llegar a hacer, encontre funciones de api que me podria ser utiles:

CreateFile
WriteFile
SetFilePointer
SetEndOfFile
CloseHandle

Pero todavia tengo que leer mucho porque hasta el momento solo consegui un ejemplo de como borrar los ultimos bytes de un archivo (Si! ya se que es lo que estaba buscando) pero no de como borrar algunos del medio, y no eh podido lograrlo, asi que sigo a la busqueda

Si te interesa aca de tedejo el ejemplo (a vos o a cualquiera que este leyendo esto):

GRACIAS IGUAL!!

'Example by Skuratovich Pavel aka P@Ssword ([email protected])
'It is an example of use of function SetEndOfFile.
Option Explicit

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) 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 Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_ALWAYS = 4
Private Const FILE_BEGIN = 0

Private Sub Form_Load()
Dim hFile As Long
Dim BytesWritten As Long
Dim Path As String

Path = "C:EOF.txt"

hFile = CreateFile(Path, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_ALWAYS, 0, 0)
If hFile = -1 Then End
WriteFile hFile, ByVal "Very very cool & long string", 28, BytesWritten, ByVal 0&
MsgBox "View file 'C:EOF.txt', then click OK"
SetFilePointer hFile, 9, 0, 0
SetEndOfFile hFile
CloseHandle hFile
MsgBox "Now view file '" & Path & "' one more time"
Unload Me
End Sub

'CHICHO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar