Gå til innhold

C#: [Løst]Prosessen får ikke tilgang til *.txt fordi den er i bruk i et annet program


Anbefalte innlegg

Feilmelding:

Prosessen får ikke tilgang til H:\Skole\IT-2\Resultatliste\resultater.exe.txt fordi den er i bruk i et annet program

 

Default.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.IO;

using System.Collections;

 

public partial class _Default : System.Web.UI.Page

{

private ArrayList LesDeltakere(string filsti)

{

ArrayList deltakerListe = new ArrayList();

FileStream fs = new FileStream(filsti, FileMode.OpenOrCreate, FileAccess.Read);

StreamReader sr = new StreamReader(fs);

while (sr.Peek() >= 0)

{

string linje = sr.ReadLine();

char[] deletegn = {';'};

string[] felter = linje.Split(deletegn);

if (felter.Length != 3)

{

continue;

}

deltaker d = new deltaker (Convert.ToInt32(felter[0]), felter[1], Convert.ToInt32(felter[2]));

deltakerListe.Add(d);

}

return deltakerListe;

}

 

private deltaker FinnBeste(ArrayList deltakere)

{

if (deltakere.Count == 0)

{

return null;

}

 

int beste = 0;

 

for (int teller = 0; teller < deltakere.Count; teller++)

{

deltaker a = (deltaker)deltakere[teller];

deltaker b = (deltaker)deltakere[beste];

if (a.Poeng > b.Poeng)

{

beste = teller;

}

}

return (deltaker)deltakere[beste];

}

 

protected void Page_Load(object sender, EventArgs e)

{

string filsti = Server.MapPath(@"resultater.txt");

ArrayList deltakere = LesDeltakere(filsti);

 

labResultater.Text = "Totalt var det med " + deltakere.Count + " deltakere:<br/><br/>";

foreach (deltaker d in deltakere)

{

labResultater.Text += d.Navn + " med " + d.Poeng + " poeng, og startnummer " + d.Startnummer + ".<br/>";

}

 

deltaker beste = FinnBeste(deltakere);

labResultater.Text += "<br/>Beste deltaker med hele " + beste.Poeng + " poeng var " + beste.Navn + " (starnummer: " + beste.Startnummer + ").";

 

}

protected void btnSettInn_Click(object sender, EventArgs e)

{

if (txtNavn.Text != "" && txtPoeng.Text != "" && txtStartnummer.Text != "")

{

string filsti = Server.MapPath(@"resultater.txt");

FileStream fs = new FileStream(filsti, FileMode.Append, FileAccess.Write);

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine(txtStartnummer.Text + ";" + txtNavn.Text + ";" + txtPoeng);

sw.Close();

labFeilmelding.Text = "";

}

else

{

labFeilmelding.Text = "Du må skrive i alle rutene for å med på listen.";

}

}

}

Koden funker helt til man skiver inn og bruker knappen. Feilkoden funker også.

 

deltaker.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for deltaker
/// </summary>
public class deltaker
{
int _startnummer;
string _navn;
int _poeng;

public deltaker(int startnr, string navn, int poeng)
{
	_startnummer = startnr;
	_navn = navn;
	_poeng = poeng;
}

public int Startnummer
{
	get { return _startnummer; }
}

public string Navn
{
	get { return _navn; }
}

public int Poeng
{
	get { return _poeng; }
}
}

 

Er dette fordi page_load- koden i default.aspx.cs ikke lukker resultater.txt eller hva skyldes problemet?

Lenke til kommentar
Videoannonse
Annonse

du lukker ikke fs i lesdeltakere.

 

Hvis du skal bruke en streamreader er det ikke nødvendig å lage en filestream.

 

using(var reader = new StreamReader("minfil.txt"))
{
 while(reader.ReadLine() != null)
 {
//...
 }
}

 

Bruk heller ikke ArrayList. Bruk List<T> istedet, List<string> for eksempel. Den er mer effektiv og enklere i bruk.

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...