Сохранить в файл, открытый openfiledialog (C # 2008) - PullRequest
0 голосов
/ 25 сентября 2011

То, что я пытаюсь сделать, скорее всего, очень просто, но после нескольких часов я все еще не могу понять, как это сделать правильно. Я могу открыть текстовый файл, используя openfiledialog, но не могу понять, чтобы сохранить обратно в тот же файл. Я хотел бы также иметь возможность проверить и проверить, используется ли файл, прежде чем писать в него. Вот мой код для кнопок открытия и сохранения:

 public void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //This if statement checks if the user has saved any changes to the list boxes

        if (MessageBox.Show(
            "Have you saved your work?\nOpening a new file will clear out all list boxes.",
            "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
        {
            //Clears out the listboxes
            this.itemListBox.Items.Clear();
            this.priceListBox.Items.Clear();
            this.qtyListBox.Items.Clear();

            //This will open the file dialog windows to allow the user to chose a file

            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Title = "Harv's Hardware";
            fileDialog.InitialDirectory = Directory.GetCurrentDirectory();
            //File Filter
            fileDialog.Filter = "txt files (*.txt)|*.txt";
            fileDialog.FilterIndex = 2;
            fileDialog.RestoreDirectory = true;
            //This if statement executes is the user hits OK
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                //StreamReader readFile = File.OpenText(fileDialog.FileName);
                currentFile = new StreamWriter(OpenFileDialog.FileName);
                String inputString = null;

                while ((inputString = readFile.ReadLine()) != null)
                {
                    this.itemListBox.Items.Add(inputString);
                    inputString = readFile.ReadLine();
                    this.priceListBox.Items.Add(inputString);
                    inputString = readFile.ReadLine();
                    this.qtyListBox.Items.Add(inputString);
                }

            }
        }

    }

и кнопка сохранения

// Закрывает и открывает файлы

        //Creates a new saveDialog
        SaveFileDialog saveDialog = new SaveFileDialog();
        saveDialog.ShowDialog();

        //Listens to the user input
        StreamWriter writeFile = File.CreateText(saveDialog.FileName);

        int indexInteger = 0;

        //Writes the actual File
        while (indexInteger < priceListBox.Items.Count)
        {

            writeFile.WriteLine(itemListBox.Text);
            writeFile.WriteLine(itemListBox.Text);
            writeFile.WriteLine(qtyListBox.Text);
            indexInteger++;

        }

    }

Спасибо за любую помощь!

1 Ответ

1 голос
/ 02 сентября 2014

Используйте SaveFileDialog вместо OpenFileDialog и можете использовать FileStream для записи в файл.

Чтобы проверить, используется ли файл или нет, это то, что я делаю ..

public bool IsFileInUse(String file)
{
    bool retVal = false;
    try
    {
        using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {
            //file is not locked
        }
    }
    catch
    {
        retVal = true;
    }

    return retVal;
}
...