Sto cercando di gestire i file nella mia applicazione web. A volte, devo creare un file in una cartella (con File.Copy):Il file viene utilizzato da un altro processo dopo File.Copy
File.Copy(@oldPath, @newPath);
E pochi secondi dopo che il file possono essere eliminati:
if (File.Exists(@newPath)) {
File.Delete(@newPath);
}
Comunque, io non so perché il nuovo file rimane bloccato dal processo del server (IIS, w3wp.exe) dopo File.Copy. Dopo File.Delete ottengo l'eccezione:
"Il processo non può accedere al file perché è utilizzato da un altro processo."
In base all'API, File.Copy non blocca il file, vero?
Ho provato a rilasciare le risorse ma non ha funzionato. Come posso risolvere questo?
AGGIORNATO: Infatti, utilizzando Process Explorer il file è bloccato dal processo IIS. Ho cercato di implementare il codice copia al fine di rilasciare manualmente le risorse ma il problema continua ancora:
public void copy(String oldPath, String newPath)
{
FileStream input = null;
FileStream output = null;
try
{
input = new FileStream(oldPath, FileMode.Open);
output = new FileStream(newPath, FileMode.Create, FileAccess.ReadWrite);
byte[] buffer = new byte[32768];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
catch (Exception e)
{
}
finally
{
input.Close();
input.Dispose();
output.Close();
output.Dispose();
}
}
Quindi, che cosa sta utilizzando il file? Chiaramente non creeresti inutilmente un file che nient'altro usa solo per cancellarlo pochi secondi dopo, quindi qualcosa deve usarlo. Cos'è questo qualcosa? –
Il file proviene da un altro sistema quindi, è cambiato in esso, devo sostituire quello vecchio. Sto sviluppando un sistema "specchio". – jbernal
Forse questa domanda simile potrebbe aiutarti: http://stackoverflow.com/questions/7937966/ – Bridge