Avatar billede frostholm Praktikant
05. februar 2004 - 10:26 Der er 6 kommentarer og
1 løsning

Funktion til at skrive i en fil, som åbnes og lukkes

Hejsa

Nu har jeg siddet et stykke tid med dette problem, skal lave en classe der kan skrive i en fil, så jeg har lavet en funktion dolog(tekst).

Når den kaldes skal en given fil åbnes, der skal skrives en linie en filen, dernæst skal den lukke filen.

Det er nemt nok, problemet er bare at windows ikke når at lukke filen før funktionen kaldes igen, hvilket resultere i en fejl "filen er i brug"

Håber der er en der kan hjælpe mig med dette.

hilsen
michael
Avatar billede sekhmet_ds Nybegynder
05. februar 2004 - 10:31 #1
Husker du at kalde Close() på den stream du bruger til at skrive med? Hvis du gør det burde programmet blocke indtil filen er lukket.

Hvis der er tale om en metode der bruges af flere tråde så sæt lock(<variable-navn-på-streamen>) {<...>} rundt om kroppen af metoden (så skal du selvf hava streamen i en felt variable).
Avatar billede sekhmet_ds Nybegynder
05. februar 2004 - 10:33 #2
Under alle omstændigheder (og specielt i den sidste eks.) bør du nok overveje ikke at lukke filen hver gang du har skrevet en linje.

Hvis du har behov for at læse fra filen mens programmet køre kan du sætte nogle parametre i din stream der gør at den godt kan læses, og så kalde Flush() på streamen når du har skrevet.
Avatar billede frostholm Praktikant
05. februar 2004 - 10:35 #3
Jeg kalder både close() på streamen og streamwriteren, men det er heller ikke det der er problemet.

Jeg kalder min funktion som :

1.åbner filen
2. skriver i den
3. lukker streamen

men hvis jeg kalder funktionen flere gange efter hinanden, kan det ske at windows ikke fysisk har nået at lukke filen, hvilket giver en exception. Og det er den jeg ønsker at undgå eller kunne håndterer
Avatar billede frostholm Praktikant
05. februar 2004 - 10:39 #4
Jeg kender ikke intervallet af hvor tit der skrives til filen, det kan være 10 gange på et minut, men ellers kan der gå timer i mellem, derfor vil jeg gerne lukke den
Avatar billede sekhmet_ds Nybegynder
05. februar 2004 - 10:45 #5
Du behøver ikke kalde Close() på begge dele, men det gør ingen forskel. Desuden behøver du ikke lave en seperat Stream til din fil, du kan blot oprette en System.IO.StreamWriter direkte på filnavnet.

Men du burde ikke havde i den situation da den som sagt burde blocke indtil filen er lukket. Har lige testet det i en console app, hvor jeg skriver 10 gange i en fil og åbner og lukker den hver gang...ingen problemer.
Avatar billede frostholm Praktikant
05. februar 2004 - 10:51 #6
kan du ikke maile mig din kode .... ndmfa@norddata.dk
Avatar billede sekhmet_ds Nybegynder
05. februar 2004 - 12:53 #7
Nemmere bare at sætte den ind her:
static void Main(string[] args) {
    for (int i = 0; i < 100; i++)
        WriteLine(i.ToString());

    Console.ReadLine();
}

static void WriteLine(string str) {
    StreamWriter writer = new StreamWriter("test.txt", true);
    writer.WriteLine(str);
    writer.Close();
}
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