Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 17:44 Der er 10 kommentarer og
1 løsning

Bypass fil allerede i brug?

Jeg er ved at lave et program som skal læse en combat log fra en spil mens spillet køre, og så vise ens dps/xph osv.
Jeg har dog et lille problem at jeg får atvide at jeg ikke kan læse fejlen da den allerede er i brug.
Er der en måde jeg kan "bypasse" dette på?

Jeg bruger File.ReadLines(Path);
Avatar billede arne_v Ekspert
21. maj 2008 - 18:17 #1
Jeg mener i et tidligere spoergsmaal at have set problemer med File.ReadLines - proev
og laes med en StreamReader som du saa kan enten kalde Close eksplicit paa
eller implicit kalde Dispose via en using statement.
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 22:18 #2
Har søgt google, men forstå ikke helt hvad du mener jeg skal?
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 22:23 #3
Skal lige tilføje at jeg har prøvet at åbne filen med notepad, og der kan jeg saktens læse og gemme, mens spillet køre og logger
Avatar billede arne_v Ekspert
21. maj 2008 - 22:26 #4
string[] lines = File.ReadAllLines(path);

->

StreamReader sr = new StreamReader(path);
string[] lines = sr.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
sr.Close();
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 22:56 #5
Desvære:
The process cannot access the file 'E:\Games\Age of Conan\CombatLog-2008-05-21_2254.txt' because it is being used by another process.
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 22:57 #6
Men det må som sagt være muligt på en måde, da notepade kan læse og redigere uden problemer.
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 22:57 #7
Undskyld, Notepad kan læse men ikke redigere.
Avatar billede doomstone-dk- Nybegynder
21. maj 2008 - 23:10 #8
Fik dette til at virke
FileStream MyFileStream = new FileStream(this.LogFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            StreamReader MyStreamReader2 = new StreamReader(MyFileStream);
            //The easiest way to Read a stream is to use the ReadLine method.
            //This method reads until it gets to the end of a line, but ...
            //it does not copy the carriage return line feed /n/r.
            string MyStringReader = MyStreamReader2.ReadToEnd();
         
            MyFileStream.Close();
            MyStreamReader2.Close();
            MyStringReader = MyStringReader.Replace("\r", "");
            return MyStringReader.Split('\n');

Dog skriv noget som et svar, så du kan få lidt point
Avatar billede arne_v Ekspert
22. maj 2008 - 03:22 #9
Nu når jeg nærlæser dit spørgsmål kan jeg se at jeg har misfortsået det. Det er
ikke dit eget program men spillet som har filen åben.

Og derfor er du nødt til at bruge FileShare.ReadWrite ...

MyStringReader.Replace("\r", "").Split('\n')

gør det samme som

MyStringReader.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Avatar billede arne_v Ekspert
22. maj 2008 - 03:23 #10
Og et svar selvom jeg ikke synes at jeg har hjulpet med meget.
Avatar billede doomstone-dk- Nybegynder
22. maj 2008 - 11:46 #11
Du prøvede, det er nok for mig :D
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