1)
Одним классом я считываю текстовый файл, их около 100 шт. в папке D:\dir1\
private System.IO.StreamReader textfile = new System.IO.StreamReader(@"D:\dir1\" + Название_Текста + ".txt");
Как я считываю информацию с текстового файла:
string Строка;
while ((Строка = textfile.ReadLine()) != null)
{
Массив_Строк. Add(Строка);
}
textfile.Close();
1. Название_Текста - string значение, я проверил он в любых случаях совпадает с названием реального текстового файла в папке D:\dir1\
2. После того, как я забрал из текстового файла необходимую мне информацию, я вызываю функцию textfile.Close();
!!! Как выясняется далее, файл все-таки не закрывается, как я это выяснил опишется позже !!!
2) Вторым классом я записываю в текстовый файл информацию в ту же папку D:\dir1\
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\dir1\" + Название_Текста + ".txt");
Как я записываю информацию в текстовый файл:
file.WriteLine("Строка №1");
file.WriteLine("Строка №2");
file.Close();
!!! В данном месте, т. е. где должна производиться запись в файл, постоянно выдает ошибку, что данный текстовый файл уже открыт и не может сейчас использоваться. !!
3)Как я определил, что файл не закрывается:
Первый класс (там, где с текстового файла считывается информация) работает нормально (в нем не выдает ошибок компилятор), изменил я только во втором классе дирректорию, куда записывать файл
System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\dir2\" + Название_Текста + ".txt");
Т. е. изменил всю строчку объявления file. И записывает без выдачи ошибки, то есть уже Записывает!
---
4)Зачем мне записывать в тот же файл, с которого я считывал информацию? Я эту информацию дополняю и "перезаписываю" файл, перезаписанная инфа постоянно мониторится еще одним классом
---
Явных проблем в архитектуре самой программы нет, над этим постарался.
Просто почему-то не разрешается перезаписывать в тот же файл.
Помогите, пожалуйста.
Другие языки программирования и технологии
C# Помогите со StreamReader и StreamWriter, ситуация жуть!
вы открываете файл каждый раз заного для чтения\перезаписи\дозаписи - открывайте файл сразу со всеми нужными режимами... т. е. и на чтение и на запись и на создание (создание - на случай отсутствия искомого файла, если его отсутствие не должно вызывать ошибки)
И так, раз такое дело, то тебе стоит поэксперементировать с методами:
Dispose()
Dispose(Boolean)
Finalize()
Close()
Методом тыка посмотри какой из них 100% освобождает ресурсы
Dispose()
Dispose(Boolean)
Finalize()
Close()
Методом тыка посмотри какой из них 100% освобождает ресурсы
>>Явных проблем в архитектуре самой программы нет, над этим постарался.
У вас наглядная 100% ПРОБЛЕМА (именно капсом) в архитектуре, а теперь поясню
1) Если вы постоянно работаете с файлом - во первых отображайте его в память, это ускорит обработку и снимет часть нагрузки с винчестера, но это актуально больше для ssd, привыкайте сразу делать грамотно.
2) Если таки работа с файлом нужна из нескольких мест - заведите переменную для работы с этим файлом, и держите его открытым всегда, просто передавайте из класса в класс ссылку на него
3) Ну и наконец третье зачем вы открываете файл каждый раз заного для чтения\перезаписи\дозаписи - открывайте файл сразу со всеми нужными режимами... т. е. и на чтение и на запись и на создание (создание - на случай отсутствия искомого файла, если его отсутствие не должно вызывать ошибки)
зы.. а вообще работать с файлом не есть кароший тон, загрузите в память файл и работайте с его копией в памяти, я ведь верно понял что файлы сравнительно не большого размера?)
У вас наглядная 100% ПРОБЛЕМА (именно капсом) в архитектуре, а теперь поясню
1) Если вы постоянно работаете с файлом - во первых отображайте его в память, это ускорит обработку и снимет часть нагрузки с винчестера, но это актуально больше для ssd, привыкайте сразу делать грамотно.
2) Если таки работа с файлом нужна из нескольких мест - заведите переменную для работы с этим файлом, и держите его открытым всегда, просто передавайте из класса в класс ссылку на него
3) Ну и наконец третье зачем вы открываете файл каждый раз заного для чтения\перезаписи\дозаписи - открывайте файл сразу со всеми нужными режимами... т. е. и на чтение и на запись и на создание (создание - на случай отсутствия искомого файла, если его отсутствие не должно вызывать ошибки)
зы.. а вообще работать с файлом не есть кароший тон, загрузите в память файл и работайте с его копией в памяти, я ведь верно понял что файлы сравнительно не большого размера?)
Василий Каллаур
Спасибо за критику! Ее так не хватало.
Что вы имеете ввиду под выражением "капсом"?
1) я так понял однажды открыть файл и переместить все его данные в оперативную память в защищенную ячейку, закрывается только в случае закрытия программы или вызова определенной функции программой. Вносить изменения в эту ячейку и при окончательном сохранении записывать в файл и освобождать ячейку в оперативке. Как это сделать? Ума не приложу.
2) Пытался держать открытым, возникает исключение типа "файл уже используется" при попытке перезаписи данных.
3) Загружаю данные (текст, который потом по определенной закономерности преобразую в таблицу в программе и производится удобные манипуляции) из файла, в режиме онлайн я абстрактно меняю табличные значения, жму "сохранить" и файл, с которого я считывал данные, п
Что вы имеете ввиду под выражением "капсом"?
1) я так понял однажды открыть файл и переместить все его данные в оперативную память в защищенную ячейку, закрывается только в случае закрытия программы или вызова определенной функции программой. Вносить изменения в эту ячейку и при окончательном сохранении записывать в файл и освобождать ячейку в оперативке. Как это сделать? Ума не приложу.
2) Пытался держать открытым, возникает исключение типа "файл уже используется" при попытке перезаписи данных.
3) Загружаю данные (текст, который потом по определенной закономерности преобразую в таблицу в программе и производится удобные манипуляции) из файла, в режиме онлайн я абстрактно меняю табличные значения, жму "сохранить" и файл, с которого я считывал данные, п
//открой нативно
FileStream _sn = new FileStream("myfile.txt", FileMode.OpenOrCreate,FileAccess.ReadWrite);
StreamWriter _sn_writer = new StreamWriter(_sn);
StreamReader _sn_reader = new StreamReader(_sn);
//оператион
_sn.Close();
FileStream _sn = new FileStream("myfile.txt", FileMode.OpenOrCreate,FileAccess.ReadWrite);
StreamWriter _sn_writer = new StreamWriter(_sn);
StreamReader _sn_reader = new StreamReader(_sn);
//оператион
_sn.Close();
Василий Каллаур
если в проекте доступ к 1 и тому же файлу задавать двумя переменными и проект будет глобально знать об их существовании, то возникнет ошибка, что уже используется файл при попытке подключения записывающей переменной к файлу. Как я уже написал в дополнении к вопросу, проблема решается путем применения using (System.IO.StreamReader readfile = new System.IO.StreamReader(файл))
{
///
}
и
using (System.IO.StreamWriter readfile = new System.IO.StreamWriter(файл))
{
///
}
{
///
}
и
using (System.IO.StreamWriter readfile = new System.IO.StreamWriter(файл))
{
///
}
И так, раз такое дело, то тебе стоит поэксперементировать с методами:
Dispose()
Dispose(Boolean)
Finalize()
Close()
Методом тыка посмотри какой из них 100% освобождает ресурсы
Dispose()
Dispose(Boolean)
Finalize()
Close()
Методом тыка посмотри какой из них 100% освобождает ресурсы
Такой геморой с текстовыми файлами. УЖАС!!!!
ОЧЕНЬ СЛОЖНО!!
FileStream sn = new FileStream("ВАШФАЙЛ. РАСШИРЕНИЕ", FileMode.OpenOrCreate,FileAccess.ReadWrite);
StreamWriter sn_write = new StreamWriter(sn);
StreamReader sn_read = new StreamReader(sn);
//Закрытие потока
sn.Close();
StreamWriter sn_write = new StreamWriter(sn);
StreamReader sn_read = new StreamReader(sn);
//Закрытие потока
sn.Close();
ой ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё
Зачем nul? Если есть EOF
Оч сложнл
Похожие вопросы
- C++ помогите начинающему ?
- Перевести C++ => C# Помогите пожалуйста!
- Связь Питона и C#. Помогите
- dev c++. помогите плз сделать задачу найти наибольшую высоту треугольника из сторонами a,b,c
- НОК 2-ух чисел - C++ Помогите, люди добрые. Как написать прогу на C++, которая вычисляет НОК двух чисел
- Что такое return в c# помогите
- C++ помогите пожалуйста! Без вашей помощи никак не получается
- Программисты C#, помогите. задачка элементарная
- C++ помогите
- программирование C++. Помогите найти ошибку
StreamReader и StreamWriter конфликтуют при подключении к 1 и тому же файлу.
Можно сделать Stream файла с доступом чтения и записи одновременно? экземпляр будет 1 и после каждого действии чтения и записи будет закрываться.
Как вы это рассматриваете?
1. Чтение из файла:
using (System.IO.StreamReader readfile = new System.IO.StreamReader(@Вернуть_Дирректорию_Файла_Для_Чтения_По_Имени_Героя (Имя_Героя)))
{
while ((Строка = readfile.ReadLine()) != null)
{
Массив_Строк. Add(Строка);
}
readfile.Close();
}
Спасибо а попытку помочь, хоть она была тщетна. Блин, я 35 руб потратил чтобы вопрос стал популярным. Жаль.