Problem z zapisem do pliku, ponieważ plik jest używany przez inny proces.

0

Mam problem z zapisem do pliku, ponieważ plik jest używany przez inny proces, pojawia się, gdy będę szybko wpisywał słowa za pierwszym razem, potem już go nie ma.

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Vocabulary
{
    public partial class FormDodajBaze : Form
    {
        public FormDodajBaze()
        {
            InitializeComponent();
            this.MaximizeBox = false;
            wylaczPolaSlowa();

        }
        //metoda wlączajaca pola do slow
        private void wlaczPolaSlowa()
        {
            textBoxSlowoAngielskie.Enabled = true;
            textBoxSlowoPolskie.Enabled = true;
        }
        private void wylaczPolaSlowa()
        {
            textBoxSlowoAngielskie.Enabled = false;
            textBoxSlowoPolskie.Enabled = false;
        }
        //metoda czyszcząca textBoxy gdzie wpisujemy słowa
        private void wyczyscTextBoxSlowa()
        {
            textBoxSlowoPolskie.Text = "";
            textBoxSlowoAngielskie.Text = "";
        }
        //metoda dodająca słowa
        public void dodajSlowa(TextBox textBoxAng, TextBox textBoxPl)
        {
            try
            {
                string sciezka = Application.StartupPath+ @"\\Bazy\"+ textBox1NazwaBazy.Text+".txt";//przekazujemy ściężkę do pliku z odpowiednią bazą
                StreamWriter sw = new StreamWriter(sciezka, true);
                string linia;
                linia = textBoxAng.Text + "," + textBoxPl.Text;
                sw.WriteLine(linia);
                sw.Close();
                MessageBox.Show("Słowa zostały poprawnie dodane do bazy. \nMożesz przejść do katalogu programu i skopiować odpowiednie nagranie dla tego słowa do folderu "+textBox1NazwaBazy.Text+"Audio"+" lub dodać kolejne słowa do bazy, a później zająć się nagraniami"+"\nW celu skorzystania z nowej bazy należy zrestartować program.", "Komunikat");
                
               
            }
            catch (IOException ex)
            {
                MessageBox.Show("Nie udało się dodać poprawnie słów do bazy. Przepraszamy."+ex, "Błąd");
            }
            wyczyscTextBoxSlowa();

        }
        //metoda dodająca wpis do pliku Bazy .txt i tworząca plika bazy
        public void dodajBaze(TextBox textBox)
        {
            try
            {
                string sciezka = Application.StartupPath + @"\\Bazy\\Bazy.txt";//otwieramy plik bazy w celu dodania wpisu
                StreamWriter sw = new StreamWriter(sciezka, true);
                sw.WriteLine(textBox.Text+",");
                sw.Close();

                FileInfo fi = new FileInfo(Application.StartupPath + @"\\Bazy\\"+textBox.Text+".txt");//tworzymy plik Bazy
                fi.Create();
                DirectoryInfo di = new DirectoryInfo(textBox.Text + "Audio");//tworzymy folder dla nagrań
                di.Create();
                MessageBox.Show("Baza została utworzona poprawnie, można przejść do dodawania słówek do bazy.", "Komunikat");
                wlaczPolaSlowa();
            }
            catch (Exception)
            {
                MessageBox.Show("Nie udało się utworzyć bazy.", "Błąd");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1NazwaBazy.Text != "")
            {
                dodajBaze(textBox1NazwaBazy);
            }
            else
            {
                MessageBox.Show("Proszę wpisać nazwę bazy.", "Komunikat");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (textBoxSlowoAngielskie.Text != "" || textBoxSlowoPolskie.Text != "")
                dodajSlowa(textBoxSlowoAngielskie, textBoxSlowoPolskie);
            else
            {
                MessageBox.Show("Proszę uzupełnić wymagane informację.", "Komunikat");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1NazwaBazy.Text = "";
            wyczyscTextBoxSlowa();
        }
    }
}

Treść błędu: http://imageshack.us/photo/my-images/6/screenbdbazy4.jpg/
Można temu jakoś zapobiec?

0

Rozwiązanie fi.Create().Dispose();;

1 użytkowników online, w tym zalogowanych: 0, gości: 1