Avatar billede cogitans Nybegynder
18. juli 2004 - 15:45 Der er 22 kommentarer og
1 løsning

Counter med læs fil

Jeg prøver at lave en counter på mn webside, men jeg kan ikke få den til at fungere. Her er koden:

        protected System.Web.UI.WebControls.Label Label1;
        protected System.Web.UI.HtmlControls.HtmlForm Form1;
        protected System.Web.UI.WebControls.TextBox TextBox1;

        private void Page_Load(object sender, System.EventArgs e)
        {
          if(Session.IsNewSession)
            numberOfGuests();
        }

        protected void numberOfGuests()
        {
            try
            {
                // Create an instance of StreamReader to read from a file.
                // The using statement also closes the StreamReader.
                //StreamReader sr = new StreamReader("C:\\Inetpub\\wwwroot\\New\\NumberOfGuests.txt")
               
                string path=@"C:\\Inetpub\\wwwroot\\New\\NumberOfGuests.txt";
                StreamReader sr = new StreamReader((System.IO.Stream)File.OpenRead(path));
           
                    TextBox1.Text = "0";
                    string line = sr.ToString();
                    // Read and display lines from the file until the end of
                    // the file is reached.
                Console.Out.WriteLine("*************************************************");
                Console.Out.WriteLine("line er "+line);
                    int antal=Convert.ToInt16(line.ToString());
                Console.Out.WriteLine("antaler "+antal);
                    antal=antal+1;
                    string opdateretAntal=antal.ToString();
                Console.Out.WriteLine("opdateret antal er "+opdateretAntal);
                    //her skal der vises talet i boxen på siden
                    TextBox1.Text.Replace(line, opdateretAntal);
                Console.Out.WriteLine("tekstbox er: ");
                      sr.Close();
                    //OpenWrite
                    FileStream sw = File.OpenWrite(@"NumberOfGuests.txt");

                    Byte[] info =
                        new UTF8Encoding(true).GetBytes(opdateretAntal);

                    sw.Write(info, 0, info.Length);
                    sw.Close();
           
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }

        }

Jeg prøvee, at finde det outputvindue, hvor er skrives med Console.out.Write(), men dette kunne jeg heller ikke finde. Hvis jeg fandt det, kunne jeg sikkert selv debugge mg frem tl løsningen.

Så hvordan finder jeg det vindue, og virker min metode til at læse filen?
Avatar billede arne_v Ekspert
18. juli 2004 - 15:57 #1
Skal Console.Out.WriteLine ikke bare være Console.WriteLine ?

Jeg tror ikke at IIS ASP.NET har et console vindue.

Nemmeste var vel at bruge Response.Write og så læse i browseren ...
Avatar billede arne_v Ekspert
18. juli 2004 - 16:06 #2
En alternativt lidt speciel mulighed vil være at skrive til Windows Event Log.

Eksempel:

EventLog.WriteEntry("Application", "Dette er en test", EventLogEntryType.Information);

(læses i control panel, administrative tools, event viewer, application log)
Avatar billede snepnet Nybegynder
18. juli 2004 - 16:37 #3
Hvis du vil skrive beskeder til dig selv kan du bruge Trace.Write(...);

Du styrer hvor vidt Trace skal være aktivt i denne sektion af web.config :

    <trace
        enabled="true"
        requestLimit="10"
        pageOutput="false"
        traceMode="SortByTime"
        localOnly="true"
    />

Hvis du har pageOutput = "false" kan du altid se dit trace ved at skrive

http://localhost/ditweb/Trace.axd

I adressebaren.

Hvis du skal skrive noget ud på din web-side kan du som Arne skriver benytte Response.Write(...), men den kan ikke rigtig anbefales da den er medtaget for bagud-kompetabilitet, og smider output ud før alt andet (det kommer endda ud før HTML tagget).
Det rigtigste ville være hvis du havde en tekstboks eller en label som du så skrev meddelelser til brugeren i.
Avatar billede cogitans Nybegynder
18. juli 2004 - 16:46 #4
Men meddelserne er ikke til brugeren. Meddelelserne er til uvikleren, så han kan se, hvad der sker ved kørsel af programet, og så man kan se indholdet af variabler f.eks..
Det eneste sted, jeg skal bruge det, er i Visual Studio's outputvindue ved kørsel. Den aktuelle kommando er den samme, som hvis man laver en consoleapplication, og man skal skrive noget ud til skærmen. Men jeg prøver lige med Console.WriteLine ...
Avatar billede snepnet Nybegynder
18. juli 2004 - 16:49 #5
Så kan du bare bruge denne :

System.Diagnostics.Debug.Write("test");
Avatar billede snepnet Nybegynder
18. juli 2004 - 16:50 #6
Eller lave en
using System.Diagnostics;

og så bare skrive
Debug.Write(...);

Og så skal du nok sikre at du kører i debug-mode :o)
Avatar billede cogitans Nybegynder
18. juli 2004 - 16:55 #7
..nope...det gungerer stadigvæk ikke...
Avatar billede snepnet Nybegynder
18. juli 2004 - 16:56 #8
Mener du Debug.Write(...) eller hva ?
Avatar billede cogitans Nybegynder
18. juli 2004 - 16:56 #9
Yes - System.Diagnostics.Debug.Write("test"); virker ;-)
Avatar billede snepnet Nybegynder
18. juli 2004 - 16:59 #10
Jamen så får du da et svar her.
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:03 #11
Du skal være opmærksom at, at hvis du bruger Trace istedet. Så har du mulighed for at aflæse dine "debug-beskeder" også på en kørende applikation - også selvom den er distribueret som release.
Det kan give lidt bedre muligheder for fejlfinding senere.
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:06 #12
ja, men min kode fungerer dog ikke helt. Når jeg lægger 1 til 0 i Textboxen, så opateres filen (@"C:\\Inetpub\\wwwroot\\New\\NumberOfGuests.txt") ikke. Desuen vil jeg jo også gerne have opdateret counteren på siden - dette kan vel gøres ved at kalde Page_Load igen. Hvordan gør man disse 2 ting?
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:12 #13
Hov... du har spurgt om noget andet også i dit oprindelige spørgsmål.

Nej - det ser ikke ud til at du nogensinde læser filen. Brug noget i stil med nedenstående i stedet :

StreamReader sr = new StreamReader(@"C:\TestFiles\testxml.xml");
while(sr.Peek() != -1)
{
    // hvad du nu vil gøre ved linien
}

sr.ToString() vil ikke give dig andet end navnet på typen... Altså "System.IO.StreamReader".
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:16 #14
Så - nu har jeg fået den tl at skrive til filen. Så nu skal værdien i TextBoxen bare opdateres på skærmen?
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:18 #15
Du kan bare gøre noget i denne stil :

Label l = new Label();
TextBox tb = new TextBox();
int numberOfLines = 0;

// Put user code to initialize the page here
StreamReader sr = new StreamReader(@"C:\TestFiles\testxml.xml");
while(sr.Peek() != -1)
{
    // hvad du nu vil gøre ved linien
    numberOfLines++;
    l.Text+=sr.ReadLine() + "<br>";
}

tb.Text = numberOfLines.ToString();
this.Controls[1].Controls.Add(l);
this.Controls[1].Controls.Add(tb);
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:19 #16
I dit tilfælde skal du så hverken oprette eller indsætte en TextBox i koden, men bare bruge den du allerede har.
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:20 #17
Ej heller en label... Det var bare hvis du ville se indholdet af filen :o)
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:29 #18
Alt i orden - nu fungerer det.
Kan jeg nå at få og vie, hvordan man kalder Page_load inde fra koden (altså sådan at man tvinger sden til at reloade)?
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:30 #19
Du kan fremtvinge et reload ved at kalde :
Response.Redirect(Request.RawUrl);

Page_Load skal du ikke selv kalde.
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:33 #20
Okay - Request.RawUrl vidste jeg nu godt. Den havde jeg prøvet me i eksemplet her. Grunden til at det ikke fungerede må være, at noget af det andet kode ikke var lavet ordentligt...
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:35 #21
System.Diagnostics.Debug.Write("test"); løste jo problemet, så du får nogle pont snepnet.
Avatar billede snepnet Nybegynder
18. juli 2004 - 17:37 #22
Er det fordi du gerne vil have at tekstboksen på siden (altså i internet explorer eller hvad du nu bruger) skal opdatere hver gang der er læst en linie ?
Avatar billede cogitans Nybegynder
18. juli 2004 - 17:53 #23
Næ næ, textboxen er en counter, som viser antal besøgende på siden.
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