Avatar billede the-gnu.dk Nybegynder
02. juni 2005 - 14:17 Der er 7 kommentarer og
1 løsning

The process cannot access the file

Jeg prøver at skrive til en fil, men får følgende Exception:

The process cannot access the file "C:\temp\test.html" because it is being used by another process.

Forløbet er som følgende:

Første gang jeg skriver, går alt fint.
Næste gang, smider den ovenstående Exception.

Det kunne så se ud somom jeg ikke får lukket filen, men det mener jeg dog jeg gør.

Kode:

FileStream output = new FileStream(fileName, FileMode.Open);

output.Write(buffer, 0, buffer.Length);

output.Close();


Nogen der kan give et svar?
Avatar billede bennytordrup Nybegynder
02. juni 2005 - 14:20 #1
Prøv:

using (FileStream output = new FileStream(fileName, FileMode.Open)) {

  output.Write(buffer, 0, buffer.Length);

  output.Close();
}

Det kunne tyde på, at output holder på filen.
Avatar billede the-gnu.dk Nybegynder
02. juni 2005 - 15:03 #2
Første gang kører det fint
Anden gang bliver der ikke smidt Exceptions, men filens størrelse ender på 0 bytes.

Hmm?
Avatar billede the-gnu.dk Nybegynder
02. juni 2005 - 15:20 #3
Jo det virker... Der skal bare gå ca. 2 min. før den tilgår filen igen.

Forklar mig lige hvad using() { }  er ?
Avatar billede the-gnu.dk Nybegynder
02. juni 2005 - 15:36 #4
Nææh, det virker fint nok, hvis man bare lader være at skrive til filen ca. 2 min efter applikationen er lukket :-) Der er til at leve med.
Avatar billede arne_v Ekspert
02. juni 2005 - 22:30 #5
using (FileStream output = new FileStream(fileName, FileMode.Open)) {
    output.Write(buffer, 0, buffer.Length);
    output.Close();
}

svarer til

FileStream output = new FileStream(fileName, FileMode.Open);
output.Write(buffer, 0, buffer.Length);
output.Close();
output.Dispose();

Jeg tvivler meget på at det Dispose kald gør en forskel.

Men lad mig gætte: filen ligger på et netværks drev !?
Avatar billede cplus Nybegynder
03. juni 2005 - 14:45 #6
using er blot et compund statement hvor GC sørger for at objektet bliver smidt på finalize stack efter brug i dit compound statement. -DU undgår Dispose.

Prøv evt:

out.Close();
out = null;

GC.Collect();
Avatar billede the-gnu.dk Nybegynder
22. juni 2005 - 19:27 #7
Nej, ikke på et netværksdrev.
Avatar billede cplus Nybegynder
22. juni 2005 - 23:35 #8
Har du prøvet at ta' en filesystemwatcher på den?

Du mangler måske nogen enums i ctor. Jeg mener den hedder FileAccess - jeg kan ikke huske om den har exclusive lock på.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester