Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB6] Cancellare file

    Ciao a tutti,
    mi trovo a dover gestire dei semplici files di testo contenenti dei codici segreti da stampare su schede. Fino a ieri, una volta che gli operatori finivano di stampare, cancellavo i files a mano, semplicemente mettendoli nel cestino e svuotandolo. Ora però un cliente pignolo non vuole più che si faccia così, perchè i files potrebbero essere recuperati tramite l'accesso diretto sul disco (le macchine non sono in rete e chi ci lavora sa a malapena come si accende un pc ). Comunque il cliente ha sempre ragione e ora mi tocca risolvere il problema.
    Ho pensato di aprire i files in modalità random, sostituire tutti i caratteri con degli spazi, salvarli e infine cancellarli semplicemente con Kill, in modo che se qualcuno dovesse riuscire a leggere sul disco nel peggiore delle ipotesi troverebbe soltanto degli spazi. Il problema è che i pc sono antiquati e il tutto è piuttosto lento.
    Esiste un modo per cancellare un file senza che sul disco non rimanga alcuna traccia?

  2. #2
    aprili in binario dovrebbe essere notevolmente + veloce
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Credo che la tua idea di "distruggere" il contenuto dei file prima di eliminarli sia valida.
    Non mi e' chiaro se la stampa delle schede avviene via software oppure no.
    Se tutto avviene via software allora puoi sfruttare il momento in cui sono aperti i file per leggere l'informazione che ti serve e subito eliminarla dal file.
    Se invece devi creare un programmino adhoc che faccia questo, puoi aprire i file in write (scrittura in testa) e, invece di eliminarne il contenuto leggendo il file, scrivi su file solo il carattere nullo con CHR(0), evitando cosi di perdere troppo tempo a rimpiazzare il contenuto del file con gli spazi.
    Saluti.

  4. #4
    Grazie per le risposte.
    La stampa avviene con un apposito software, non creato da me. Anche volendo non potrei eliminare i files appena dopo la stampa, perchè potrebbe essere necessario creare dei ripristini. Ho pensato anche ad una soluzione come la tua, ma sono passato oltre perchè mi è rimasto questo dubbio: facendo così non è che viene sostiuito solo il puntatore al file vecchio con quello del file nuovo? Cioè non è che viene utilizzato fisicamente un altro spazio del disco, non essendo un accesso diretto? Anche se non fosse così non mi basta inserire un solo carattere perchè cambierei solo un byte, ma tutti gli altri no. Devo essere sicuro di eliminare tutti i bytes perchè è un semplice file di testo, anche perdendo la prima metà del contenuto riuscirei a recuperare la seconda.

  5. #5
    Se apri il file in write, cioe' aprendo il file in scrittura in testa, ponendo il puntatore del file all'inizio dello stasso, tutto quello che inserirai sara' inserito in testa al file e automaticamente tutto il contenuto verra' eliminato.
    Puoi usare il seguente codice:

    Sub EliminaContenuto()
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Dim fs, f
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("c:\percorso_file\nome_file.txt", ForWriting,TristateFalse)
    f.Write CHR(0)
    f.Close
    End Sub

    Questa sub compie le seguenti operazioni:
    1. apre il file "nome_file.txt" (che deve necessariamente esistere altrimenti ci sono problemi), in scrittura in testa;
    2. scrive nel file il carattere nullo CHR(0)
    3. chiude il file.

    Dovrebbe funzionare.

  6. #6
    Originariamente inviato da francesco_test
    automaticamente tutto il contenuto verra' eliminato.
    Forse non hai capito il mio problema...
    Viene eliminato per quello che vedi a livello utente, cioè se lo apri usando un qualsiasi editor vedrai solo il carattere che inserisci te ( chr(0) nel tuo esempio). Di fatto il file sarà solo di un byte, ma gli altri bytes sul disco rimangono (anche se non utilizzati da niente) fino a quando non vado ad occupare quello spazio di memoria con altri file. Se per esempio provi a fare un programma in C che va a leggere sul disco partendo da un indirizzo casuale, potresti ottenere parti di file che magari hai cancellato un mese fa.
    Grazie comunque!

  7. #7
    Allora devi scrivere una routine di sistema in c con cui vai a sovrascrivere le locazioni di memoria incriminate.
    L'unico problema e' sapere dove andare ad agire in memoria (mi riferisco agli indirizzi fisici).
    Comunque.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Utilizza questo semplice codice

    Dim fh As Integer
    Dim s As String

    fh = FreeFile
    Open "C:\testo.txt" For Binary As #fh
    s = Space$(LOF(fh))
    Put #fh, , s
    Close #fh

    che rimpiazza i tuoi dati, velocemente, con degli spazi.

    E dato che lo fa con lo stesso numero di caratteri, quelli vecchi vengono rimpiazzati senza ulteriori allocazioni di spazio su disco.

  9. #9
    Perfetto, ora proverò!
    Spero solo che la variabile "s" possa contenere tutto il file, quelle macchine avranno al massimo 32 mega di ram, al massimo lo spezzetto.
    Grazie mille!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, se lo devi spezzare e non riesci a modificare il codice, fammi sapere.

    La stringa, in teoria, puo' contenere 2 G di dati.

    Pero' avevo capito che i tuoi file di testo non fossero grandissimi ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.