Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[API] Cancellare un file aperto

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[API] Cancellare un file aperto

Messaggioda DilanDog » lun mag 08, 2006 2:18 pm

Capita ogni tanto che, ad esempio in seguito al crash di un programma, un file che era stato aperto da quell'istanza rimanga tale per cui non è più possibile cancellarlo fino a quando non si riavvia il computer. Se questo file poi si trova su un server, il problema aumenta perché riavviare un server in alcuni casi può essere una bella rottura di scatole.
Qualcuno conosce una funzione per cancellare un file anche se è aperto? L'API Deletefile di windows fallisce miseramente....un'alternativa?? [cry]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Lando » lun mag 08, 2006 3:02 pm

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!
Avatar utente
Lando
Bronze Member
Bronze Member
 
Messaggi: 576
Iscritto il: sab mar 25, 2006 10:40 am
Località: Switzerland

Messaggioda DilanDog » lun mag 08, 2006 3:15 pm

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!


Il problema è che dovrei farlo da codice, per cui ci vorrebbe un'API ad hoc per poter avere anche un riscontro dell'operazione ecc
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano


Messaggioda Silver Black » mar mag 09, 2006 12:37 am

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.

P.S.
[nota] Ehi Dilan, non hai specificato a che linguaggio è legata la tua richiesta!!! Devi metterlo anche nel tag nell'oggetto della discussione.
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda DilanDog » mar mag 09, 2006 9:24 am

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.


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 [:-D]

Silver Black ha scritto:P.S.
[nota] Ehi Dilan, non hai specificato a che linguaggio è legata la tua richiesta!!! Devi metterlo anche nel tag nell'oggetto della discussione.


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] [banned?]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » mar mag 09, 2006 10:07 am

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


Ma riesci a farlo anche con qualsiasi file correntemente aperto? Comunque bravo, ottima ricerca e ottimo lavoro! [applauso]

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 [:-D]


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.

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] [banned?]


Immaginavo, ma come hai giustamente pensato dovevi mettere [API]. [sedia]
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda DilanDog » mar mag 09, 2006 2:20 pm

Silver Black ha scritto:
DilanDog ha scritto:
Ma riesci a farlo anche con qualsiasi file correntemente aperto? Comunque bravo, ottima ricerca e ottimo lavoro! [applauso]



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 [:-D]

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 [:-D]


Immaginavo, ma come hai giustamente pensato dovevi mettere [API]. [sedia]


Vedo che qualcuno ci ha pensato al posto mio [fischio] Tnks [applauso]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » mar mag 09, 2006 2:36 pm

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.


Ah ecco, mi sembrava strano! [:)]

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 [:-D]


Ma una macchina adibita a server non dovrebbe essere utilizzata per registrare file audio... [dry]

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 [:-D]


Non è una brutta idea! Prova a dirglielo, poi dicci che ti ha detto (solo che se vuole implementarla in Vista mi sa che esce nel 2020). [fischio]


Vedo che qualcuno ci ha pensato al posto mio [fischio] Tnks [applauso]


[8D] [8D] [8D]
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda DilanDog » mar mag 09, 2006 2:54 pm

Silver Black ha scritto:
Ma una macchina adibita a server non dovrebbe essere utilizzata per registrare file audio... [dry]



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 [:-D]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » mar mag 09, 2006 3:04 pm

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 [:-D]


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).
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda DilanDog » mar mag 09, 2006 3:21 pm


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).


In realtà è già parzialmente così, nel senso che ci sono vari client che lavorano sui files audio aprendone una copia in locale e solo a lavoro finito ritrasferiscono sul server ed in questo caso raramente ci sono intoppi. In altre situazioni invece purtroppo non è possibile aprire delle copie, per cui si lavora in tempo reale sul server. In alcuni casi si manda in onda addirittura un file in streaming mentre quest'ultimo è ancora in fase di registrazione e questi sono ovviamente i casi più critici. Dove ci sono le possibilità (e l'intelligenza aggiungo io [:-D] ) viene sempre affiancato un server in mirroring proprio per sopperire ad eventuali riavvii o rotture del principale, ma capita spesso che per risparmiare una manciata di euro si rinunci a qualcosa di veramente importante....vaglielo a far capire alla gente [sbigot]
Avatar utente
DilanDog
Senior Member
Senior Member
 
Messaggi: 208
Iscritto il: ven apr 15, 2005 9:13 am
Località: Milano

Messaggioda Silver Black » mar mag 09, 2006 3:48 pm

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 [sbigot]


Come ti capisco!... [XX(]
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

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