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

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

11.01.2019, 14:23. Показов 1971. Ответов 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
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,902
Записей в блоге: 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
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,902
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru