Qualcuno conosce una funzione per cancellare un file anche se è aperto? L'API Deletefile di windows fallisce miseramente....un'alternativa??
![Mi metto a piangere... [cry]](http://www.megalab.it/forum/images/smilies/crying.gif)
Lando ha scritto:A volte ho il tuo stesso problema, solamente che non è su di un server!
Tentando due o tre volte una dopo l'altra il file si lascia cancellare!
Credo comunque che tu possa con i dovuti comandi, cancellarlo tramite il prompt di dos!
Silver Black ha scritto:Il problema è che se il file è in uso, qualche processo l'ha lockato o quanto meno si è "dimenticato" di sbloccarlo. E quindi per Windows il file è intoccabile. Indi per cui... non esiste API che tenga, il file non si può cancellare.
A volte basta aspettare qualche minuto e il file risulterà sbloccato, ma se Windows ritiene che sia lockato, non c'è proprio nulla da fare.
Silver Black ha scritto:P.S.
Ehi Dilan, non hai specificato a che linguaggio è legata la tua richiesta!!! Devi metterlo anche nel tag nell'oggetto della discussione.
DilanDog ha scritto:Immaginavo...infatti mi sono dovuto organizzare di conseguenza e fare in modo di azzerare il contenuto ed accodare i dati invece di creare un nuovo file. Per la cronaca, a chi dovesse interessare, utilizzo le seguenti API di windows, visto che con funzioni VB di manipolazione dei files sarebbe impossibile troncare un file a 0 già aperto da un altro processo senza poterlo cancellare.
lopen -> Apre il file
lwrite -> scrive sul file aperto. La cosa interessante è che impostando come byte da scrivere 0, con il puntatore di scrittura ad inizio file, il risultato è che il file viene troncato a 0, ed è quello che serve a me quando non è possibile cancellare il file.
lclose -> rilascio l'handle del file
In questo modo risolvo parzialmente il problema, anche se a mio avviso non avere un metodo per sbloccare forzatamente un file aperto a livello di sistema operativo è un po' limitante visto che costringe ad un riavvio della macchina....ma capisco che fin dagli albori di Windows il riavvio è una componente irrinunciabile di questo sistema operativo, e quindi....leggevo da qualche parte una battuta del tipo "con Linus si lavora, con Windows si riavvia![]()
Lo so e di solito lo faccio, stavolta era voluta la cosa perché mi sembrava un argomento che non era limitato ad un singolo linguaggio ma più genericamente al sistema operativo windows...forse allora avrei dovuto scrivere qualcosa tipo [API]
Silver Black ha scritto:DilanDog ha scritto:
Ma riesci a farlo anche con qualsiasi file correntemente aperto? Comunque bravo, ottima ricerca e ottimo lavoro!
Effettivamente è possibile farlo solo se il file è aperto in sola lettura e nel mio caso è così,visto che sono files audio e quando restano aperti al 99% è successo qualcosa all'interno della DLL che utilizzo per suonare questi files, aperti appunto in sola lettura. Solo che se restano aperti non riesco più a registrarci sopra, quindi devo registrare su un file temporaneo e poi "incollare" il tutto su questo file, visto che "riavviare il server=fermare tutto", quindi deve essere proprio l'ultimissima spiaggia. Insomma, se c'era un modo per "killare" il file aperto era meglio
Ma no dai, in fondo è un sistema di protezione per prevenire eventuali... mal di testa! Pensa infatti se fosse possibile con una semplice API: qualsiasi programma "malware" potrebbe essere in grado di cancellare gli stessi file in uso da Windows. Un file aperto deve essere bloccato e credo lo sia anche in linux. Lo stesso per un antivirus: che succederebbe se esso venisse cancellato mentre è in esecuzione? A parte che è un nonsenso, potrebbero essere aggirato facilmente da qualsiasi virus.
Altra cosa sarebbe poter cancellare sono quei file bloccati ma in realtà non più in uso. In realtà questo non è un problema di Windows stesso, ma delle applicazioni che non rilasciano correttamente gli handle ai file. Di conseguenza Windows crede (e non potrebbe fare altrimenti) che il file sia ancora in uso.
In effetti hai ragione, non avevo pensato a questa cosa. L'ideale sarebbe avere (o magari c'è sono già...) una modalità di apertura files "protetta" che impedisce la cancellazione sempre e comunque, e questa modalità potrebbe essere adotatta da files critici o di sistema. Negli altri casi invece la chiusura dovrebbe poter essere forzata da altre applicazioni, un po' come quando si forza la chiusura di un processo. Possibile che non ci sia qualcosa del genere? Stasera scrivo a Zio Bill e glielo chiedo
Immaginavo, ma come hai giustamente pensato dovevi mettere [API].
DilanDog ha scritto:Effettivamente è possibile farlo solo se il file è aperto in sola lettura e nel mio caso è così,visto che sono files audio e quando restano aperti al 99% è successo qualcosa all'interno della DLL che utilizzo per suonare questi files, aperti appunto in sola lettura.
Solo che se restano aperti non riesco più a registrarci sopra, quindi devo registrare su un file temporaneo e poi "incollare" il tutto su questo file, visto che "riavviare il server=fermare tutto", quindi deve essere proprio l'ultimissima spiaggia. Insomma, se c'era un modo per "killare" il file aperto era meglio![]()
In effetti hai ragione, non avevo pensato a questa cosa. L'ideale sarebbe avere (o magari c'è sono già...) una modalità di apertura files "protetta" che impedisce la cancellazione sempre e comunque, e questa modalità potrebbe essere adotatta da files critici o di sistema. Negli altri casi invece la chiusura dovrebbe poter essere forzata da altre applicazioni, un po' come quando si forza la chiusura di un processo. Possibile che non ci sia qualcosa del genere? Stasera scrivo a Zio Bill e glielo chiedo![]()
Vedo che qualcuno ci ha pensato al posto mioTnks
Silver Black ha scritto:
Ma una macchina adibita a server non dovrebbe essere utilizzata per registrare file audio...![]()
DilanDog ha scritto:Si, se è un server audio... si tratta di applicazioni per emittenti radiofoniche, e se fermi il server si ferma tutta la radio e gli ascoltatori cambiano canale
E aggiungere un computer? Il server vero e proprio verrà mantenuto solo per fornire i servizi alla radio, e una workstation per creare/registrare/gestire i contenuti (on demand).
DilanDog ha scritto:[ma capita spesso che per risparmiare una manciata di euro si rinunci a qualcosa di veramente importante....vaglielo a far capire alla gente
Visitano il forum: Nessuno e 0 ospiti
megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising