Я делаю программу, которая позволяет вам катить пять различных типов многосторонних «кубиков», а когда вы катите число, я хочу, чтобы оно хранило его в текстовом файле. В верхней части моей формы есть элемент меню, который вы нажимаете, он закрывает StreamWriter и FileStream и открывает вторую форму, показывающую, какие числа были прокатаны и по какому типу они были свернуты (я имею в виду только числа, свернутые теперь для простоты), и он отлично выглядит. Но когда я закрываю Reader, Stream и вторую форму и возвращаюсь к первой форме, я пытаюсь повторно открыть Writer и Stream, и он говорит мне, что он уже используется.Попытка REOPEN Sytem.IO объектов
Моя первая форма в код:
using System;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Random ran = new Random();
static FileStream outFile = new FileStream(@"H:\C#\Independant Projects\VirtualDice\History.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(outFile);
private int ranNum;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ranNum = ran.Next(1, 21);
Display();
}
private void button2_Click(object sender, EventArgs e)
{
ranNum = ran.Next(1, 13);
Display();
}
private void button3_Click(object sender, EventArgs e)
{
ranNum = ran.Next(1, 5);
Display();
}
private void button4_Click(object sender, EventArgs e)
{
ranNum = ran.Next(1, 9);
Display();
}
private void button5_Click(object sender, EventArgs e)
{
ranNum = ran.Next(1, 11);
Display();
}
private void Display()
{
lblNum.Text = String.Format("{0}", ranNum);
lblNum.Visible = true;
writer.WriteLine(ranNum);
}
private void historyToolStripMenuItem_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 1;
writer.Close();
outFile.Close();
History history = new History();
history.ShowDialog();
}
private void button1_Click_1(object sender, EventArgs e)
{
FileStream outFile = new FileStream(@"H:\C#\Independant Projects\VirtualDice\History.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(outFile);
tabControl1.SelectedIndex = 0;
}
}
}
Моя вторая форма в код:
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class History : Form
{
public History()
{
InitializeComponent();
}
static private FileStream inFile = new FileStream(@"H:\C#\Independant Projects\VirtualDice\History.txt", FileMode.Open, FileAccess.Read);
private StreamReader reader = new StreamReader(inFile);
private void History_Load(object sender, EventArgs e)
{
string item;
item = reader.ReadLine();
try
{
lstHistory.Items.Add(item);
}
catch (Exception)
{
lstHistory.Font = new Font(lstHistory.Font.Name, 12, lstHistory.Font.Unit);
lstHistory.Items.Add("You have not rolled any numbers");
}
}
}
}
Есть ли инструкция по использованию, которую мне нужно использовать, потому что я не могу найти ключевое слово singleton? Также два других решения не помогли мне. –
Каковы два других решения, которые не сработали для вас? Синглтон - это шаблон, а не синтаксис языка. Это похоже на то, что все функции открытия, чтения и записи файла в одном классе и вызова его функций в любом месте вы хотите в коде. Проверьте ссылку, которую я предоставил, чтобы узнать, как реализовать и использовать шаблон. Что касается 'use', да, это утверждение в C#, и вы можете прочитать больше об этом [здесь] (https://msdn.microsoft.com/en-us/library/yh598w02.aspx). –