С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Завершение процесса чтения из файла

11.01.2019, 14:23. Показов 1951. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел здесь на форуме такой вот код для выборочного чтения строк из файла посредством итератора:
Цитата Сообщение от Ma3a Посмотреть сообщение
C++
1
2
3
4
5
6
// получаем итератор в коллекцию строк
System::Collections::Generic::IEnumerator<System::String ^> ^ it = System::IO::File::ReadLines("test.txt")->GetEnumerator();
     // переводим итератор на первую строку файла
     it->MoveNext();
     // получаем строку, на которую указывает итератор и пишем куда надо
     label1->Text = it->Current;
Всё бы хорошо, но вот только почему-то после применения этого метода я не могу получить доступ к файлу test.txt

Например, так работает:
C++
1
2
3
4
5
6
7
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
     System::Collections::Generic::IEnumerator<System::String^>^ it = System::IO::File::ReadLines("test.txt")->GetEnumerator();
     it->MoveNext();
     label1->Text = it->Current;
 
                 }
А так нет:
C++
1
2
3
4
5
6
7
8
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
     System::Collections::Generic::IEnumerator<System::String^>^ it = System::IO::File::ReadLines("test.txt")->GetEnumerator();
     it->MoveNext();
     label1->Text = it->Current;
 
     File::Delete("test.txt");
             }
виснет из-за того, что удаление файла невозможно, так как файл "test.txt" занят другим процессом.
Вопрос: Что я не так делаю и/или как остановить процесс, предшествующий File.Delete?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2019, 14:23
Ответы с готовыми решениями:

Завершение процесса Excel после обработки файла
Доброго времени суток, Подскажите пожалуйста, как завершить процесс Excel после использования? Вот что я делаю: ...

Распараллеливание процесса чтения файла
В цикле for у меня читаются фрагменты файла и с ними кое-чего делается без записи в этот или другой файл. Порядок чтения этих фрагментов...

Завершение процесса при обнаружении другого процесса на .bat или .vbs
Будет всегда висеть в системе не закрываясь и смотреть при открытии даже одной из этих программ notepad.exe aimp.exe tc.exe будет...

3
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
11.01.2019, 15:56
Лучший ответ Сообщение было отмечено LVV как решение

Решение

LVV, файл занят текущим процессом. Он же открыт на чтение методом File::ReadLines. Следовательно нужно закрыть файл перед удалением.
C++
1
2
3
4
5
6
7
8
9
10
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 
     System::Collections::Generic::IEnumerator<System::String^>^ it = System::IO::File::ReadLines("test.txt")->GetEnumerator();
     it->MoveNext();
     label1->Text = it->Current;
 
     delete it; // Закрываем файл путем вызова Dispose у итератора
 
     File::Delete("test.txt");
             }
Также стоит задуматься нужен ли в самом деле здесь итератор. Он полезен для упрощения построчного чтения в цикле или для чтения растянутого на вызовы нескольких методов. Хотя для последнего по моему логичнее использовать StreamReader чтобы не плодить посредников.
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
11.01.2019, 16:11  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Он полезен для упрощения построчного чтения в цикле
Именно в цикле и использую (вложенные циклы, сложнаяя система, читается количество элементов, потом сами элементы и так далее)
Спасибо за ответ.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
11.01.2019, 16:22
Цитата Сообщение от LVV Посмотреть сообщение
нно в цикле
Ок. На всякий случай - я имел в виду цикл for each который берет на себя правильную работу с итератором
C++
1
2
3
4
5
for each (String^ line in System::IO::File::ReadLines("test.txt"))
{
    Console::WriteLine(line);
}
// Файл неявно закрывается в конце цикла
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2019, 16:22
Помогаю со студенческими работами здесь

Завершение процесса при обнаружении другого процесса
Здравствуйте. Люди добрые подскажите пожалуйста как мне быть. Есть приложение которое следит за процессами в диспетчере, запущены 2...

Завершение процесса
Пожалуйста подскажите что не правильно целый день маюсь Вылетает при нажатии: void MainWindow::on_pushButton_taskkill_clicked() { ...

Завершение процесса
Всем привет.Мне нужно закрыть определённый процесс(допустим cmd.exe),если будет открыт другой процесс(notepad.exe).Как закрыть процесс я...

Завершение процесса
Как через PascalABC.NET завершить процесс определенной программы ?

Завершение процесса
Доброго времени суток. Вот такой вопрос: bool answer; HWND name_of_debug_window; LPDWORD exit_code; if (result == true) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru