Добрый день. Возникла трудность с функцией File.Move C#. Переименовываю файлы директории, но файлы, которые были выше в методе использованы для чтения и записи, не переименовываються, а создаются их копии с новыми именами. Тоесть файл якобы используется. Не могу разобраться как так выходит, потому что всегда для чтения и записи использую такую конструкцию: StreamReader file = new StreamReader(path); string text = file.ReadToEnd(); file.Close(); И после такого файл все равно используется и невозможно его переименовать. Подскажите, как граммотно в таком случае сделать переименование недавно использованного для чтения или записи файла?
Покажи полностью код от открытия файла и до закрытия с переименовкой. Мне кажется, что ты где то преждевременно вызываешьь функцию переименования.
Code: using(StreamReader sr = new StreamReader("file.txt)) { string data = sr.ReadToEnd(); sr.Close(); } File.Move("file.txt","file2.txt"); Должно пахать... А вообще... отладчик рулит.
Приветствую. Решил попробовать написать бота для мморпг. Ранее аналогичного опыта не имел. Разобрался с получением данных из клиента. Вопрос такой - в какую сторону рыть для реализации отправки пакетов(эмуляцию работы клиента? каким-то образом инжект в него?). Т.е. собственно для осуществления действий в ММО. Понятно, что в каждой игрушке свои особенности, но все же приблизательный общий алгоритм. Есть у кого аналогичный опыт? да понимаю, задача сложная. Но вроде как руку уже набил на простом софте)
Подскажите что в коде не так Здраствуйте подскажите получил задание по C#, из массива A удалить те элементы, которые встречаются и в массиве A и в массиве B по крайней мере по 2 раза. Написал как смог код, но что-то не так, когда с клавиатуры ввожу массив дальше не идет ничего. Буду огромно признателен, если поможете. namespace MyProject Code: { class MainClass { public static void Main (string[] args) { int N1,N2,buff,inc1,inc2; bool flag=false; inc1=1; inc2=0; buff=0; Console.WriteLine("Введите размерность первого массива"); N1 = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите размерность второго массива"); N2 = Convert.ToInt32(Console.ReadLine()); int[] x = new int[N1]; int[] y = new int[N2]; Console.WriteLine("Введите первый массив"); for (int i = 0; i < N1; i++) x[i] = Convert.ToInt32(Console.ReadLine ()); Console.WriteLine("Введите второй массив"); for (int i = 0; i < N2; i++) y[i] = Convert.ToInt32(Console.ReadLine ()); for(int i=0;i<N1;i++) { for(int j=i+1;j<N1;j++) { if (x[i]==x[j]) { buff=x[i]; inc1++; flag=true; } } if(flag==true) { for(int l=0;l<N2;l++) { if (buff==y[l])inc2++; } if(inc2>1) { for (int t1=0;t1<N1;t1++) { if(x[t1]==buff) { for (int v=t1;v<N1-1;v++ )x[v]=x[v+1]; } } for (int t1=0;t1<N2;t1++) { if(y[t1]==buff) { for (int v=t1;v<N2-1;v++ )y[v]=y[v+1]; } } } } } Console.WriteLine("Первый массив"); Console.WriteLine("Удаленно "+inc1+"элементов массива:"+ buff); for(int i =0;i<N1-inc1;i++) Console.WriteLine(x[i]); Console.WriteLine("Второй массив"); Console.WriteLine("Удаленно "+inc2+"элементов массива:"+ buff); for(int i =0;i<N2-inc2;i++) Console.WriteLine(y[i]); } } }
Уточни, ты имеешь ввиду если в массиве а есть как минимум два одинаковых числа, например 4 и в массиве б есть два числа 4, то их нужно удалить?
Вот пример массив A[8]: 3 3 4 5 2 3 5 9, массив B[7]: 1 2 3 4 5 2 5. По 2 раза в обоих массивах встречается только элемент, равный 5. Массив A после удаления примет вид: A[6]: 3 3 4 2 3 9.
Понял, вот, только учти, что я делал под винформс, а не консоль, так что под консоль прийдётся кое где подшаманить. Code: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Array_double_search { public partial class Form1 : Form { public static int[] array_1 = new int[] { 1, 3, 4, 4, 5, 2,5,7,6,4,1}; public static int[] array_2 = new int[] { 8, 1, 4, 4, 5, 2,7,5,9,9,0}; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //Максимально число возможных повторений это кол-во элементов в массиве деленное на два double j = array_1.Length / 2; int anz = (int)Math.Round(j+1);//Округляем в большую сторону int[] temp_array1 = new int[anz];//Временный массив в который будут записываться повторяющиеся элементы int gCount = 0;//общий счётчик повторений //Прогоняем первый массив for (int i = 0; i < array_1.Length; i++) { int count = 0; //Проверяем наличие совпадений по всему массиву, и увеличиваем счётчик при совпадении. for (int t = i + 1; i < array_1.Length - 1 && t < array_1.Length - 1 ; t++) { count = array_1[i] == array_1[t] ? count + 1 : count; } //Если есть совпадения. if (count > 0) { int tCount = 0; //Прогоняем повторяющиеся элемент из первого массива по второму, и ищем минимум два совпадения во втором массиве for (int secondArr = 0; secondArr < array_2.Length; secondArr++) { if(array_1[i] == array_2[secondArr]) { tCount++; } } //Находим повторяющиеся одинаковые элементы в обоих массивах и пишем во временный массив temp_array1[gCount] = array_1[i]; gCount++; } } //Выводим массив, без повторяющихся елементов for (int a = 0; a < array_1.Length; a++) { int FC = 0; int SC = 0; for (int c = 0; c < gCount; c++) { FC = array_1[a] == temp_array1[c] ? FC + 1 : FC; SC = array_2[a] == temp_array1[c] ? SC + 1 : SC; } //Массив 1 в Текстбокс1 if(FC == 0) { textBox1.Text += array_1[a].ToString(); } Массив 2 в Текстбокс2 if (SC == 0) { textBox2.Text += array_2[a].ToString(); } } } } } ЗЫ: только для равных по кол-ву эелементов массивов. Если хочешь разные массивы, то подшамань.
ajiuratop вот мой вариант решения задачи (если уместно использовать списки, подходит для массивов разной длинны, условие массив А >= 1): static void Main(string[] args) { var m1 = new int[10] { 11, 23, 44, 2, 34, 23, 2, 44, 44, 34 }.ToList(); //инициализация массива var m2 = new int[10] { 11, 2, 4, 34, 34, 11, 2, 44, 44, 2 }.ToList(); //с конвертацией в List<> var result = new List<int>(); //сюда пишем очищенный массив m1(A) foreach (var i in m1) //бежим по списку m1(А) { int pos1Inm1 = m1.IndexOf(i); //дергаем индекс первого вхождения в список элемента i int pos2Inm1 = m1.LastIndexOf(i);//дергаем индекс последнего вхождения в список элемента i int pos1Inm2 = m2.IndexOf(i); //тоже самое int pos2Inm2 = m2.LastIndexOf(i);//тоже самое //создаем условие задачи // - в списке А индексы элемента не должны совпадать // - в списке В индексы элемента не должны совпадать // - элемент не должен присутствовать в результирующем списке if ((pos1Inm1 != pos2Inm1) && (pos1Inm2 != pos2Inm2) && (!result.Contains(i))) { result.Add(i); //добавить в результат А Console.Write("{0} ",i); } } Console.ReadKey(); } для указанных в примере значений массивов А и В результирующий массив А {44, 2, 34}
Задание не мешает читать более внимательно. 1. Использовать именно массив[n] 2. Минимум по 2 одинаковых числа в обоих массивах. 3. Как результат у тебя должно выйти А (11,23)
ам сорри действительно не так понял. Но все равно через индексы красивее TO: shiku var buf = new Char[36] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // алфавит из которого будет генерироваться случайная строка var rnd = new RNGCryptoServiceProvider(); //рандомайзер из CryptoAPI var ch2 = new byte[1]; //буффер for (int j = 0; j < 100; j++) { for (int i = 0; i < 10; i++) { rnd.GetBytes(ch2); //получить случайнный байт {0..255} int pos = ch2[0] % buf.Length; //немного математики чтобы получить индекс символа в алфавите Console.Write(buf[pos]); //символ } Console.ReadKey(); Console.WriteLine(); } жмем ENTER смотрим на случайнные строки
Привет всем. Такой вопрос, я создаю дополнительный поток : Thread t = new Thread(f1); t.Start(); В методе f1 есть обращение к контролу формы: j = richTextBox1.Lines.Count(); Что выдает ошибку о невозможности обращения к элементу созданному в другом потоке. Подскажите как такое решается?
Подскажите как правильно зацикливать работу потоков? Вот есть код: while (true) { Thread[] Thrd = new Thread[10]; for (int i = 0; i < 10; i++) { Thrd = new Thread(f); Thrd.Start(); } System.Threading.Thread.Sleep(5000); } Вобщем суть чтоб потоки отрабатывали, потом заданное колличество времени ждем и поновой запускаем потоки. Но они не запускаются почему то. Намекните в чем я ошибаюсь плиз? Вроде бы поток нельзя запускать повторно, но ведь разве тут не создаются каждый раз новые объекты?
Может через рекурсию попробовать? ) PHP: static void callThreads() { Thread[] Thrd = new Thread[10]; for (int i = 0; i < 10; i++) { Thrd[i] = new Thread(f); Thrd[i].Start(); } System.Threading.Thread.Sleep(5000); callThreads(); }
shiku http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx суть, используешь Thread Pool ожидаешь завершения работы всех потоков, запускаешься по новому. в примере все довольно понятно. удачи!