С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
1

Foreach преобразование типа char к string невозможно

24.05.2016, 20:04. Показов 3625. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
ругается на второй цикл, ошибка в заголовке
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
private void button3_Click(object sender, EventArgs e)
        {
            saveFileDialog1.DefaultExt = "txt";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(filename);
                string start_time = "Нет доступа к информации о процессе";
                foreach (var winProc in Process.GetProcesses())
                {
 
                    try
                    {
 
                        start_time = winProc.StartTime.ToString();
 
                    }
                    catch (Exception er)
                    {
 
                    }
 
                    sw.WriteLine(winProc.Id.ToString() + "Имя: " + winProc.ProcessName + ", Время старта: " + start_time);
                    using (System.IO.StreamWriter file =
           new System.IO.StreamWriter(@"C:\Users\Мрр\Documents\WriteLines2.txt"))
                    {
                        foreach (string line in filename)
                        {
                            // If the line doesn't contain the word 'Second', write the line to the file.
                            if (!line.Contains(winProc.Id.ToString()))
                            {
                                file.WriteLine(line);
                            }
                        }
                    }
                }
 
                sw.Close();
               
            }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2016, 20:04
Ответы с готовыми решениями:

Преобразование типа string в char невозможно
Выдает на этих двух фрагментов эту ошибку - "\08". Помогите как можно исправить? ...

Что значит неявное преобразование типа string[] в char[] невозможно?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Неявное преобразование типа char[] в char невозможно
надо создать ступенчатый массив, элементами которого будут буквы русского алфавита. Элементы...

Ошибка: преобразование char в string невозможно
Задача такова, написать прогу на WinForm чтобы: Надрукувати слова, які складаються з перших та...

14
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
24.05.2016, 20:11 2
Katrrin, а он нужен, этот второй цикл? Чего Вы сделать то хотите?
fileName - это string, следовательно элемент строки line - char, Вы же указываете что желаете string.
0
Эксперт .NET
6511 / 4087 / 1606
Регистрация: 09.05.2015
Сообщений: 9,553
24.05.2016, 20:13 3
Может вы хотели без цикла for? Т.к. сам цикл очень странный, вы перебираете символы в строке...
C#
1
2
3
4
5
                            // If the line doesn't contain the word 'Second', write the line to the file.
                            if (!filename.Contains(winProc.Id.ToString()))
                            {
                                file.WriteLine(filename);
                            }
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
24.05.2016, 20:58  [ТС] 4
мне нужно по всем строкам в файле пройти, поэтому такой цикл
нужно сравнить ID процессов и если их нет то строка переписывается полностью

Добавлено через 1 минуту
нужно сделать это
Вывод в текстовый файл списка процессов, завершивших выполнение в период работы

монитора. Список должен содержать:

 имя процесса;

 время старта (час: мин: сек) – если процесс запущен после старта монитора;

 время завершения (час: мин: сек).
есть файл в который записаны процессы
и с которым нужно сравнить те процесссы которые есть сейчас
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
24.05.2016, 20:58 5
Лучший ответ Сообщение было отмечено Katrrin как решение

Решение

Katrrin, если по строкам то так:
C#
1
foreach (string line in File.ReadLines(filename))
1
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
25.05.2016, 14:38  [ТС] 6
такая ошибка возникает(
Процесс не может получить доступ к файлу "C:\Users\Мрр\Downloads\кп.txt", так как этот файл используется другим процессом.
не скажете как избавиться?

Добавлено через 17 часов 34 минуты
Если можете помогите пожалуйста)
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
25.05.2016, 14:42 7
Цитата Сообщение от Katrrin Посмотреть сообщение
"C:\Users\Мрр\Downloads\кп.txt"
Что это за файл? Откуда он взялся?

Если Вы код изменили, то покажите.
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
25.05.2016, 21:04  [ТС] 8
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private void button3_Click(object sender, EventArgs e)
        {
            
            saveFileDialog1.DefaultExt = "txt";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(filename);
                string start_time = "Нет доступа к информации о процессе";
                foreach (var winProc in Process.GetProcesses())
                {
                    
 
                    try
                    {
 
                        start_time = winProc.StartTime.ToString();
 
                    }
                    catch (Exception er)
                    {
 
                    }
 
                    sw.WriteLine(winProc.Id.ToString() + "Имя: " + winProc.ProcessName + ", Время старта: " + start_time);
                    using (System.IO.StreamWriter file =new System.IO.StreamWriter(@"C:\Users\Мрр\Documents\WriteLines2.txt"))
                    {
                        foreach (string line in File.ReadLines(filename))
 
                        {
                            // If the line doesn't contain the word 'Second', write the line to the file.
                            if (!line.Contains(winProc.Id.ToString()))
                            {
                                file.WriteLine(line);
                            }
                        }
                    }
                }
 
                sw.Close();
               
            }
        }
 
}
это файл который создается а имя задается пользователем
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
25.05.2016, 21:16 9
Katrrin,

Посмотрите на строки 8 и 28
C#
1
StreamWriter sw = new StreamWriter(filename);
C#
1
foreach (string line in File.ReadLines(filename))
Вы пишите и читаете один и тот же файл.
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
25.05.2016, 22:04  [ТС] 10
так мне и нужно создать файл и прочитать его, либо если можете скажите как открыть уже сохраненный файл и сравнить ID процессов и записать только те которых уже открытых в системе нет

Добавлено через 11 минут
просто я не совсем соображаю что мне нужно делать(
Или как это реализовать
вот полный текст программы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
using System;
 
using System.Collections.Generic;
 
using System.ComponentModel;
 
using System.Data;
 
using System.Diagnostics;
 
using System.Drawing;
 
using System.IO;
 
using System.Linq;
 
using System.Text;
 
using System.Threading.Tasks;
 
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public List<Processes> procList = new List<Processes>();
 
        public int count = 0;
        public Form1()
        {
            InitializeComponent();
            List<Processes> procList = new List<Processes>();
 
            dataGridView1.AutoGenerateColumns = true;
 
            bindingSource1.DataSource = this.procList;
 
            Timer tmr = new Timer();
 
            tmr.Interval = 500;
 
            tmr.Tick += new EventHandler(tmr_Tick);
 
            tmr.Start();
        }
       
        private void tmr_Tick(object sender, EventArgs e)
        {
 
            try
            {
 
                this.procList.Clear();
 
                foreach (var winProc in Process.GetProcesses())
                {
 
                    string min_threads = "";
 
                    string totalProcessorTime = "";
 
                    try
                    {
 
                        min_threads = winProc.Threads.OfType<ProcessThread>().Where(t => t.ThreadState == ThreadState.Running).Count().ToString();
 
                        totalProcessorTime = winProc.TotalProcessorTime.ToString();
 
                    }
                    catch (Exception er)
                    {
 
                    }
 
                    this.procList.Add(new Processes(winProc.Id.ToString(), winProc.ProcessName, winProc.PeakVirtualMemorySize64.ToString(), winProc.WorkingSet64.ToString(), totalProcessorTime));
 
                }
 
                dataGridView1.DataSource = this.procList;
 
                dataGridView1.Refresh();
 
            }
            catch (DataException er)
            {
 
                MessageBox.Show(er.Message, "Ошибка обновления данных.");
 
            }
 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string data = "";
 
            int row = Convert.ToInt32(dataGridView1.CurrentCell.RowIndex);
 
            int pid = Convert.ToInt32(dataGridView1[0, row].Value);
 
            Process process = Process.GetProcessById(pid);
 
            string process_name = process.ProcessName;
 
            foreach (ProcessThread thread in process.Threads)
            {
 
                data += "ID: " + thread.Id + ", Состояние: " + thread.ThreadState + "\n";
 
            }
 
            MessageBox.Show(data, "Информация о процессе " + process_name);
        }
        private void bindingSource1_CurrentChanged(object sender, EventArgs e)
        {
            
        }
 
      
 
        private void button2_Click(object sender, EventArgs e)
        {
            saveFileDialog1.DefaultExt = "txt";
            if(saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(filename);
                string start_time ="Нет доступа к информации о процессе";
                foreach (var winProc in Process.GetProcesses())
                {
 
                    try
                    {
 
                        start_time = winProc.StartTime.ToString();
 
                    }
                    catch (Exception er)
                    {
 
                    }
 
                    sw.WriteLine("Имя: " + winProc.ProcessName + ", Время старта: " + start_time);
 
                }
 
                sw.Close();
 
            }
 
}
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            
            saveFileDialog1.DefaultExt = "txt";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(filename);
                string start_time = "Нет доступа к информации о процессе";
                foreach (var winProc in Process.GetProcesses())
                {
                    
 
                    try
                    {
 
                        start_time = winProc.StartTime.ToString();
 
                    }
                    catch (Exception er)
                    {
 
                    }
 
                    sw.WriteLine(winProc.Id.ToString() + "Имя: " + winProc.ProcessName + ", Время старта: " + start_time);
                    using (System.IO.StreamWriter file =new System.IO.StreamWriter(@"C:\Users\Мрр\Documents\WriteLines2.txt"))
                    {
                        foreach (string line in File.ReadLines(filename))
 
                        {
                            // If the line doesn't contain the word 'Second', write the line to the file.
                            if (!line.Contains(winProc.Id.ToString()))
                            {
                                file.WriteLine(line);
          [VBNET][/VBNET]                  }
                        }
                    }
                }
 
                sw.Close();
               
            }
        }
 
}
        }
Добавлено через 18 минут
Разобралась, только если сможете скажите пожалуйста как мне в перезаписанный файл добавить к тем процессам еще и время их закрытия(самму функцию я знаю, просто не знаю как сделать это именно по нужнм ID)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string[] lines = System.IO.File.ReadAllLines(filename);
 
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Мрр\Documents\WriteLines2.txt"))
                {
                    foreach (var winProc in Process.GetProcesses())
                    {
                    foreach (string line in File.ReadLines(filename))
                    {
                        // If the line doesn't contain the word 'Second', write the line to the file.
                        if (!line.Contains(winProc.Id.ToString()))
                        {
                            file.WriteLine(line);
                            
                        }
                    }}
Добавлено через 13 минут
не работает
мда
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
25.05.2016, 22:08 11
Katrrin, совсем не понимаю, что Вы делаете...
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
25.05.2016, 22:11  [ТС] 12
да я вот уже тоже не понимаю

Добавлено через 1 минуту
я кнопкой 2 сохраняю файл txt
мне нужно сравнить с ним те процессы которые есть в момент нажатия кнопки3
и сохранить в новый файл добавив туда время завершения
вот я не знаю как это сделать
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
25.05.2016, 22:19 13
Katrrin, во-первых, касательно работы с файлами.

Так бездумно нельзя с ними работать. Запись и чтение из файлов должна происходить единажды, в том смысле, что один раз прочитали данные из файла, например, строки, и загнали их в список List<string>. Дальше работаете с данными в памяти. Затем, когда данные подготовлены, записываете их в файл.

Если Вам нужно из файла читать не только строки, а еще и распознавать элементы строк (т.е. парсить строки), то нужно либо придумать формат, удобный для распознавания, либо использовать один из известных типа XML, JSON, SCV и др. В Вашем случае, как я понял, нужно вытащить идентификатор процесса из строки.

Во-вторых,
Цитата Сообщение от Katrrin Посмотреть сообщение
добавить к тем процессам еще и время их закрытия
Те процессы уже закрыты, Вы не сможете получить время закрытия процесса, который неизвестно когда был закрыт. Класс Process не предоставляет такой информации.
В цикле Вы перечисляете только текущие запущенные процессы.
C#
1
foreach (var winProc in Process.GetProcesses())
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
25.05.2016, 22:23  [ТС] 14
получить процессы можно по их ID
по крайней мере препод так сказала
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
нужно вытащить идентификатор процесса из строки.
как это сделать?
если вы можете сделать, то я наверное смогу заплатить, правда не очень много
просто вот на этот пункт у меня уже мозгов не хватает к сожалению
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
25.05.2016, 22:30 15
Katrrin,

Цитата Сообщение от Katrrin Посмотреть сообщение
получить процессы можно по их ID
по крайней мере препод так сказала
Препод права, можно. Но ведь не закрытые процессы!

Цитата Сообщение от Katrrin Посмотреть сообщение
как это сделать?
C#
1
var id = int.Parse(line.TakeWhile(Char.IsDigit).Aggregate(string.Empty,(a,b)=>a+b));
Добавлено через 1 минуту
Даже лучше так
C#
1
var id = String.Join(string.Empty, line.TakeWhile(Char.IsDigit));
0
25.05.2016, 22:30
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2016, 22:30
Помогаю со студенческими работами здесь

Неявное преобразование типа "string" в "char" невозможно
&gt;= и &lt;=, пишет что неправильный тип, делал тип string, так же не работает, что не правильно? ...

Неявное преобразование типа "string" в "char" невозможно
Неявное преобразование типа &quot;string&quot; в &quot;char&quot; невозможно (Char x = textBox2.Text;) Искал на форуме...

Преобразование типа из "char" в "string" невозможно
Есть такой код: internal static string Check_files(string Game) { ...

Преобразование из типа char в string
Добрый день, как преобразовать значение элемента массива из символьного типа в строковый для...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru