09. oktober 2005 - 13:22Der er
16 kommentarer og 1 løsning
Logfil (Textfil)
Jeg er ved at lave et system hvor jeg gerne vil logge forskellligt aktivitet i en tekstfil. Jeg har nu to problemer...Jeg får en fejl med at jeg ikke kan få adgang til tekstfilen fordi den bliver brugt af en anden app. Så 1): Hvad er fejlen i koden. 2): Jeg render vel ind i et problem hvis 2 personer forsøger at skrive til tekstfilen samtidig? Hvordan omgåes det bedst, og er det en dårlig metode at gøre det på denne måde?
append ligger teksten bagved...det er kun for at ha den i DESC order... Jeg har ikke tænkt så meget over at bruge 3.parts kode, det var lige så meget for at kun ha det jeg vil bruge...men vil jeg ikke rende ind problemer hvis to prøver at skrive til samme tekstfil på en gang? Er der en smartere måde hvis man selv vil lave det?
Jeg laver en ny logfil for hver dag...det er kun en logfil over fejl, og der skulle helst ikke komme så mange at det bliver et problem... forstår ikke helt: "en typisk løsning ville være at lade de 2 forekomster af samme program sende til en server og så lade den skrive til filen"
er det muligt at lave en kø med hvad der skal skrives til filerne, så serveren bare gør det sideløbende mens brugeren bare bliver sendt videre? Jeg mister vel en klasse når brugeren går væk fra en side?
hvor man kan tilføje et nyt element, ved jeg ikke rigtigt hvordan jeg skulle implementere at den venter på at filen er fri. Kommer brugeren ikke til at hænge indtil filen er blevet skrevet til?
Faktisk er det ikke så vigtigt at få logget ALT, jeg kunne godt lade nogen af dem smutte, men diskutionen er ret interessant
Hej igen...jeg skal lige være sikker på det jeg egentligt vil kan lade sig gøre. Hvis jeg på siden bare smider et objekt (indeholder en filsti og et indhold) i treadpool(den er jeg ikke helt sikker på), kan brugeren frit gå videre selv om indholdet ikke er blevet skrevet endnu? så hvis der fx er en kø på 10, skal han ikke vente på at dem før ham bliver færdig før han kan komme videre? Eller bliver han nød til at vente?
Hej arne. Hvis du gider at hjælpe mig lidt mere på vej, opretter jeg lige et spm med nogen flere point?
Jeg har været lidt rundt på forskellige sider og har prøvet at læse lidt omkring det, men er stadig temmeligt meget på bar bund. Her er hvad jeg har nu (faktisk mest afskrift, for jeg er ikke helt klar over hvad det præcist er der sker):
Jeg har klasserne:
namespace IS.Net { public class LogQueue { private Queue FileQueue;
public LogQueue() { FileQueue = new Queue(); }
public void Enqueue(LogfileObjekt L) { //Låser, så ingen anden thread kan tilgå samtidig Monitor.Enter(FileQueue); FileQueue.Enqueue(L); //Sender signal om at låsen er blevet ændret Monitor.PulseAll(FileQueue); //Åbner for nye elementer i køen Monitor.Exit(FileQueue); }
public LogfileObjekt Dequeue() { LogfileObjekt L = null; do { Monitor.Enter(FileQueue); if(FileQueue.Count>0) { L = (LogfileObjekt)FileQueue.Dequeue(); } else { Monitor.Wait(FileQueue); } Monitor.Exit(FileQueue); }while(L==null); return L; } }
public class WorkerThread { private LogQueue cq; public WorkerThread(LogQueue cq) { this.cq = cq; } public void Run() { while(true) { LogfileObjekt OL = cq.Dequeue(); IS.Net.WriteLog WL = new IS.Net.WriteLog(OL); WL.Execute(); } }
}
public class WorkerThreadPool { private WorkerThread[] wt; public WorkerThreadPool(int n, LogQueue cq) { wt = new WorkerThread[n]; for(int i = 0; i < wt.Length; i++) { wt[i] = new WorkerThread(cq); Thread t = new Thread(new ThreadStart(wt[i].Run)); t.Name = "Thread-" + (i + 1); t.Start(); } } }
}
public class LogfileObjekt { String _FullPath="",_Content=""; bool _Append,_CreateFile,_EmailNotification; public LogfileObjekt(String FullPath, String Content, bool Append,bool CreateFile,bool EmailNotification) { _FullPath=FullPath; _Content=Content; _Append=Append; _CreateFile=CreateFile; _EmailNotification=EmailNotification; }
public String FullPath { get { return _FullPath; } } public String Content { get { return _Content; } }
public bool Append { get { return _Append; } } public bool CreateFile { get { return _CreateFile; } }
public bool EmailNotification { get { return _EmailNotification; } } }
public class WriteLog { bool _CreateFile,_EmailNotification; LogfileObjekt L;
Ok. Jeg kan godt skrive til filerne hvis jeg ikke har de sidste to linier med. Så det ser ud som om det fungere...
Synes godt om
Ny brugerNybegynder
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.