private void menuItem7_Questions(object sender, System.EventArgs e)
{
string filename = "1.questions";
load_questions(filename);
}
private void load_questions(/*Stream stream,*/ string filename)
{
FileStream fs;
try
{
fs = new FileStream(filename, FileMode.Open, FileAccess.Read);//, FileShare.Read);
}
catch
{
MessageBox.Show(filename, "Файл не найден");
return;
}
StreamReader sr = new StreamReader(fs);
string strLine = "";
int iLine = 1;
while (strLine==sr.ReadLine())
{
MessageBox.Show("Вопросы"/*, iLine++, strLine*/);
}
fs.Close();
}
Чтение из файлов
Вот функция, по одному из пунктов в меню должны выводится из файла вопросы, пока хотя по МessageBox. Все равно не получается...
Код:
Значит, файл есть 1.questions. А срабатывает catch - Файл не найден.
По этому даже не могу посмотреть и поделать, чтобы нормально выводились вопросы.
В общем найдите отличия и сделайте выводы:
Код:
private void menuItem7_Questions(object sender, System.EventArgs e)
{
string filename = "1.questions";
load_questions(filename);
}
private void load_questions(string filename)
{
string exe_path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\";
try
{
using (StreamReader sr = new StreamReader(exe_path, Encoding.GetEncoding(1251)))
{
int nLineCounter = 0;
while (!sr.EndOfStream)
{
MessageBox.Show(sr.ReadLine(), string.Format("Вопрос №{0}", ++nLineCounter),
MessageBoxButtons.OK,
MessageBoxIcon.Question);
}
}
}catch(FileNotFoundException ex)
{
MessageBox.Show(filename, "Файл не найден");
}catch(Exception ex)
{
MessageBox.Show(ex.Message, "Oops! Exception thrown");
}
}
{
string filename = "1.questions";
load_questions(filename);
}
private void load_questions(string filename)
{
string exe_path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\";
try
{
using (StreamReader sr = new StreamReader(exe_path, Encoding.GetEncoding(1251)))
{
int nLineCounter = 0;
while (!sr.EndOfStream)
{
MessageBox.Show(sr.ReadLine(), string.Format("Вопрос №{0}", ++nLineCounter),
MessageBoxButtons.OK,
MessageBoxIcon.Question);
}
}
}catch(FileNotFoundException ex)
{
MessageBox.Show(filename, "Файл не найден");
}catch(Exception ex)
{
MessageBox.Show(ex.Message, "Oops! Exception thrown");
}
}
1) The type or namespace name 'Assembly' could not be found (are you missing a using directive or an assembly reference?)
2) The type or namespace name 'Encoding' could not be found (are you missing a using directive or an assembly reference?)
3) 'System.IO.StreamReader' does not contain a definition for 'EndOfStream'
Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
2) using System.Text;
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
3) StreamReader.EndOfStream Property
public bool EndOfStream { get; }
Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)
это только для второй..
Version Information
.NET Framework
Supported in: 2.0
.NET Compact Framework
Supported in: 2.0
Цитата: Ap0k
1) using System.Reflection;
Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
2) using System.Text;
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
3) StreamReader.EndOfStream Property
public bool EndOfStream { get; }
Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)
Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
2) using System.Text;
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
3) StreamReader.EndOfStream Property
public bool EndOfStream { get; }
Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)
первые две ошибки я исправила. А вот с третьей что-то не получается... Напишите поподробнее, пожалуйста.
В этой версии, свойство EndOfStream у класса StreamReader отсутствует, и введено оно начиная со второй версии.
В данном случае достаточно будет поменять условие в цикле чтения данных и написать вместо
while (!sr.EndOfStream) { }
while (sr.BaseStream.Length > sr.BaseStream.Position) { }
у меня выскакивает эксепшен по второму catch.
где нужно файлик 1.questions хранить? у меня он создан как item в solution...
Если exception выстреливает по второму catch - значит это уже не FileNotFoundException, а что-то другое.. приведите код и название исключения с сообщением.
{
string exe_path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\";
try
{
using (StreamReader sr = new StreamReader(exe_path, Encoding.GetEncoding(1251)))
{
int nLineCounter = 0;
while (sr.BaseStream.Length > sr.BaseStream.Position)
{
MessageBox.Show(sr.ReadLine(), string.Format("Вопрос №{0}", ++nLineCounter),
MessageBoxButtons.OK,
MessageBoxIcon.Question);
}
}
}
catch(FileNotFoundException ex)
{
MessageBox.Show(filename, "Файл не найден");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Oops! Exception thrown");
}
}
private void menuItem7_Questions(object sender, System.EventArgs e)
{
string filename = "1.questions";
load_questions(filename);
}
а эксэпшен такой: couldn't find a part of the path "D:\адрес...\bin\Debug"
вот тут:
using (StreamReader sr = new StreamReader(exe_path, Encoding.GetEncoding(1251)))
надо так:
using (StreamReader sr = new StreamReader(exe_path + filename, Encoding.GetEncoding(1251)))
Кстати, вы отладчиком пользуетесь?
отладчиком пользуюсь, вот только в визуалке не помогает. Выводится вообще не знаю как. Мне нужно-то чтобы содержимое всего файла нормально вывелось. Надо помучиться еще.
Всего файла в одном сообщении?
да. Но только вы, наверно, чуть-чуть не поняли меня. Мне надо было по нажатию одного из Итемс выводить новую форму, где бы и отображался необходимый текст.