webForumDet fria alternativet

IOException

4 svar · 499 visningar · startad av bobrov

bobrovMedlem sedan maj 200835 inlägg
#1

Hej jag försöker skapa en spara-funktion i mitt blackjack spel som jag ska göra som uppgift i skolan.
Idén är att spara ner olika status på de olika spelarna i text i en fil.

Jag får dock problem. Här är min kod:

    private void saveGame()
    {
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            path = saveFileDialog1.FileName;
            File.Create(path);
            StreamWriter sw = new StreamWriter(path);
            
            ...här följer kod som skriver till filen...

            sw.Flush();
            sw.Close();
        }
    }

problemet är att oftast kan jag spara en gång, men försöker jag en andra gång under att samma program körs dvs jag har inte startat om programmet kommer följande exception:

            StreamWriter sw = new StreamWriter(path);

The process cannot access the file 'C:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\BlackJack\BlackJack\bin\Debug\sfjdhj.bj' because it is being used by another process.

Ibland händer detta även första gången men oftast andra gången jag försöker spara i samma spel. Spelar ingen roll om jag döper om filen jag sparar till eller om jag försöker skriva över en gammal.

Vad är problemet? Används sökvägen fortfarande av saveFileDialog1?
Jag har testat följande rad utan framgång: saveFileDialog1.Dispose();

Tacksam för hjälp/svar.

CatZMedlem sedan jan. 20022 341 inlägg
#2

felet är att du inte har stängt filen när du är klar med den första gången och skriver till samma fil. Det finns en massa fiffiga tillägg du kan göra. Till att börja med skulle jag rekommendera att du inte spara direkt i programmappen om du inte måste. Istället för File.CreatePath kan du kolla med

if (!Directory.Exists)
  Directory.Create(path);

Har själv haft lite problem med File.Create(path) tidigare.

Beroende lite på om det är en fil som ska lagras eller sparas tillfälligt så kan du testa med OpenOrCreate, WriteThrough, DeleteOnClose och några till.

bobrovMedlem sedan maj 200835 inlägg
#3

Okej.
Jag löste mitt problem med att istället för att skriva till filen med en StreamWriter så använde jag File.WriteAllText() med en sökväg och texten som jag vill skriva. Jag skulle dock föredra att använda en StreamWriter men hur stänger man filen som man har skrivit till när man är färdig? Det är ju det som är problemet precis som catz påpekar. File.Close() hade ju varit bra men den finns inte. Någon som har en idé?

ZaimanMedlem sedan dec. 20012 439 inlägg
#4

Använda TextWriter istället?
Denna fungerar för mig iaf.

using (TextWriter wr = new StreamWriter(renTo, false, System.Text.Encoding.Default))
                    {
                        string line = reader.ReadLine();
                        for (int i = 0; i < 1; i++)
                        {
                            line = reader.ReadLine();
                        }

                        while ((line = reader.ReadLine()) != null)
                        {

                            if (line.Length < 12)
                            {
                                wr.WriteLine();
                            }
                            else
                            {
                                line = line.Remove(0, 11);
                                line = line.Replace("\"", "");
                                wr.WriteLine(line);
                            }

                        }
                        wr.Close();
                        wr.Dispose();
                    }
NickemannenMedlem sedan aug. 20003 524 inlägg
#5

Ett tips är att använda Using runtomkring de klasser som det går att ta dispose på.
Eller en try catch som kör dispose på objektet.

Genererad på 368 ms · cache AV · v20260730165559-full.f96bc7eb