Creo que tienes un ligero problema de concepto...
Escribir al inicio del fichero no es rentable, porque implica que tendrás que desplazar hacia abajao todo el contenido del fichero actual, o bien moverlo a otro fichero (más abajo te describo 2 modos, ensaya cual resultare más rápido al caso, aunque es probable que sucumbas al más cómodo de programar). Esto supone una sobrecarga innecesaria de trabajo... Quizás tengas imaginado que tu escribes al principio y automáticamente no hace falta más...
Si hablamos de unos pocos kb, o si hablamos de algún que otro Mb. pero la frecuencia de escritura es muy larga, tal vez no implique un exceso de trabajo, pero eso debe saberlo quien diseña el programa, es decir tú.
Si a pesar de todo, necesitas escribir al principio, puedes usar una de 2 soluciones:
1 - Como ya se ha dicho moviendo hacia abajo todo el contenido previo, esto requiere calcular direcciones, además de lento, resulta engorroso. Pero recuerda que deberás mover previamente todo para abajo, lamentablemente, el diseño de los ficheros está limitado para 'append' sólo al final, y no al principio. Utiliza open en los modos output o binary (nunca append) y la instrucción para escribir podrá ser, por ejemplo: put#canal, posición_byte, lo_qué_escribo_cadena/estructura.
2 - Creas un nuevo fichero, añades eso que quieres, detrás 'pegas' el contenido del log actual, al final destruyes aquél y a este le cambias la entensión, por ejemplo de '.tmp' a '.log' . Utiliza open como hasta ahora con el modo Append. Este método es más sencillo de programar.
-----------------
Si dijeras las razones por las que quieres escribir al principio tal vez se pudiera ofrecer una solución más eficaz, esto es conseguir el objetivo buscado en esas 'razones' sin castigar el trabajo de actualización de los ficheros. Dicho de otro modo, no has descrito correctamente tu problema, sino que te has cerrado en banda con 'quiero esto'...
p.d.: Otra cosa que puedes hacer es, no escribir cada vez que surge la necesidad, al fichero, sino guardarlo localmente en una matriz, y al gfinal del la sesión del programa guardarlo todo de una sola vez, entonces sólo rescribes todo el log 1 única vez y no (pongamos que) 200 veces durante la ejecución del programa...
Un pequeño esquema:
' a nivel de formulario
dim logs() as string
dim nLogs as long
' al carfgar el formulario en evento load
redim logs(0 to 100)
nlogs=0
' añadir un comentario...
private sub AñadirLog( byval log as string)
if log <>"" then
if nlogs =ubound(logs) then
redim preserve logs(0 to nlogs +100) ' añadimos 100 'líneas' libres más
end if
logs(nlogs)= log
nlogs=nlogs +1
end if
end sub
' antes de salir del programa, en el evento queryunload...
' avisar hay operaciones pendientes de realizar...
if nlogs <> 0 then ' si se guardaron logs...
dim n as integer, m as integer
n=freefile
open ruta & "nombrelog" & ".tmp" .............
for k= nlogs to 0 step -1 ' recordar escribirlos en orden inverso....lo que tiene la matriz.
' escribir linea logs(k)
next
m= freefile
open ruta & "nombrelog.log" ......
' tomar del canal #m
' escribir en canal #n
close #m
close #n
kill ruta & "nombrelog.log"
' renombrar nombrelog.tmp a nombrelog.log
end if
La ventaja como se ha indicado es que no se abre (cada vez que se genera un log ), el fichero para añadir una línea al inicio y mover el resto del contenido actual. La desventaja es que existe la posibilidad de que ante un error del programa si se 'cierra de repente', se pierde el log generado ....
Por último es más óptimo usar una opción intermedia, mantener sólo una matriz de 100 elementos:
' a nivel de formulario
dim logs()
dim nLogs as byte
' en load form..
redim logs(0 to 99)
nLogs=0
' rutina del log, añadir un comentario...
private sub AñadirLog( byval log as string)
if log <>"" then
logs(nlogs)= log
nlogs=nlogs +1
if nlogs = 100 then ' cuando se llena la matriz...
' guardar a fichero los 100 registros... rutina similar a la descrita anteriormente en queryunload...
' recordar escribirlos en orden inverso.... o apuntar hacia 99 e ir reduciendo...
redim logs(0 to99) ' sin, preseve... eliminamos contenido actual
nLogs=0 ' reiniciamos nueva cuenta...
end if
end if
end sub
' en query unload, se investiga, si nlogs es dstinto de 0 hay logs por escribir...