112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
1

Можно ли сначала прочесть файл, а потом открыть его в потоке

12.10.2014, 02:18. Показов 1735. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чувствую, что путаюсь в многочисленных классах файлов/потоков. Пробовал и так и этак - либо выдаст написанное мной общее исключение, либо сделает всё для двух строчек (одной итерации) и зависает. Строк в файле 12 - через одну идут строки с целыми числами, разделённые пробелами.
В коде, если не говорить огульно, мне не нравится, что у меня файл сначала открывается для считывания содержимого в массив строк, а потом открывается в потоке - может быть в этом ошибка.

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
                    string[] fullLine = File.ReadAllLines("C://Work c//Cardial.txt", Encoding.Default);
 
                    string newTempLine = "hjxyjtrjjsgf";
 
                    int c = -1;
 
                    FileStream strm = File.Open(@"C:\Work c\Cardial.txt", FileMode.Create, FileAccess.Write);
                    StreamWriter writer = new StreamWriter(strm);
                    if (strm != null)
                    {
                        /*for (int i = 1; i < 12; i += 2)
                        {
                            c += 2;
                            string[] tempLine = fullLine[i].Split(' ');
                            //if (i == 1) MessageBox.Show("{0}", tempLine.ToString());
                            //newFullLine = new string[tempLine.Length];
                            foreach (string s in tempLine)
                            {
                                newTempLine += "drabadan";//(int.Parse(s) + rnd.Next(12, 120)).ToString();
                                newTempLine += " ";
                            }
                            //if(i==1) MessageBox.Show("{0}", newTempLine);*/
                            writer.WriteLine("#{0}", c);
                            writer.WriteLine(newTempLine);
 
                            //foreach (string s in newTempLine)
                            //sw2.WriteLine(newTempLine);
                        //}
                        writer.Flush();
                    }
                    writer.Close();
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2014, 02:18
Ответы с готовыми решениями:

Как сначала описать класс а потом написать его реализацию
Как в C# сначала описать класс а потом написать его реализацию(не используя interface) так, как это сделано в С++? Например(С++): class...

Дан текстовый файл. В каждой его строке сначала идет текст, а потом - вещественное число. Создать два файла: файл, содер
Дан текстовый файл. В каждой его строке сначала идет текст, а потом - вещественное число. Создать два файла: файл, содержащий текстовую...

Можно ли открыть Мьютекс в другом потоке и освободить его ?
Если мы Перевели Мьютекс в НЕсигнальное состояния внутри нашего потока, ТО разлочить этот мьютекс, то есть перевести его в Сигнальное...

8
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.10.2014, 02:26  [ТС] 2
Добавляю проект и файл
Вложения
Тип файла: rar NoiseToFile2.rar (44.7 Кб, 4 просмотров)
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
12.10.2014, 02:28 3
baliar, а чем Вам не нравится способ прочесть все/записать?
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.10.2014, 02:33  [ТС] 4
Что-то вроде File.WriteAllLines(string path, IEnumerable<string> contents) ?
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
12.10.2014, 02:44 5
baliar, нет, Ваш метод - ReadAllLines итд. Если памяти много ест - лучше открыть на чтение и создать на запись временный файл. Одновременно читать по строкам и записывать. Потом File.Move.
У Вас, возможно ошибка в том, что
C#
1
string newTempLine = "hjxyjtrjjsgf";
лежит вне цикла, и на каждой итерации накапливает большие значения

Добавлено через 8 минут
Вообще, в таких случаях формирование строки лучше делать StringBuilder'ом, потому что s = s+ "..." создаст новую строку и в памяти будет висеть старое и новое значение. А еще лучше - записывать сразу в файл и нигде не хранить предыдущие значения.
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.10.2014, 03:05  [ТС] 6
Цитата Сообщение от rRczZZ Посмотреть сообщение
записывать сразу в файл и нигде не хранить предыдущие значения
То есть сразу File.Append()?

Добавлено через 16 минут
Возможно моя тема дублируется с ранее созданной Извините за возможные неудобства.
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
12.10.2014, 03:07 7
Лучший ответ Сообщение было отмечено baliar как решение

Решение

baliar, вот примерно так
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
string fileName = @"P:\321\Cardial.txt";
string tempName = Path.Combine(
    Path.GetDirectoryName(fileName),
    string.Format(@"{0}.txt", Guid.NewGuid()));
 
using (var sr = new StreamReader(fileName))
using (var wr = new StreamWriter(tempName))
{
    Random rnd = new Random();
    int counter = 0, iNum;
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        if (counter++ % 2 == 0) continue;
 
        wr.WriteLine("#{0}", counter); // тут я не знаю что нужно выводить в задаче
 
        string[] nums = line.Split((string [])null, StringSplitOptions.RemoveEmptyEntries);
        foreach (var sNum in nums)
        {
            if (int.TryParse(sNum, out iNum))
            {
                wr.Write(iNum + rnd.Next(12, 120));
                wr.Write(" ");
            }
        }
        wr.WriteLine();
    }
}
File.Delete(fileName);
File.Move(tempName, fileName);
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.10.2014, 03:25  [ТС] 8
Вроде бы работает - спасибо. Правда, на ночь уже не стану разбирать код. Завтра, наверное. Ещё раз благодарю.

...Вроде бы примерно то же самое, только совершенно другими методами - сам бы не написал, продолжал бы переставлять наиболее очевидные методы потоков и файлов.
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
13.10.2014, 22:36  [ТС] 9
Гм. Дабы не плодить темы с малозначащими названиями... А можно ли как-то разделить логику в описанном выше коде. Скажем нам нужно получать и добавлять в файл разные сигналы - без инкапсуляции выходит копирование кода в каждый новый класс. А если бы был, скажем, File Manager, можно было бы, наверное, как-то открыть поток в его конструкторе, а потом к этому объекту применить метод настроенного на определённый сигнал класса... У меня уже 3ий класс сигналов пошёл и в каждом копипаст с доработкой... Но если тема не очевидна, не заморачивайтесь - попробую сам что-нибудь придумать.
0
13.10.2014, 22:36
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2014, 22:36
Помогаю со студенческими работами здесь

Можно ли открыть .xnb, отредактировать его потом опять запихать?
Можно ли открыть .xnb, отредактировать его потом опять запихать? :)

Как сначала открыть MyForm1, а потом MyForm?
как заставить сначала открывать MyForm1, а потом MyForm? #include &quot;MyForm1.h&quot; #include &quot;MyForm.h&quot; #include &lt;windows.h&gt; ...

Во второй массив сначала переписать сначала положительные, потом 0, потом отрицательные
Не могу решить задачу, прямо застрял на ней. Помогите, пожалуйста. Нужно: заполнить массив из 10 элементов положительными и...

Можно ли загрузить в облако текстовый файл и потом отображать его в приложении?
Привет. Реально ли загрузить в облоко текстовый файл и потом отображать его в приложении?

Открыть и прочесть *.amf файл
Здравствуйте форумчане. Необходимо прочесть файл Action Message Format. В Qt есть для этого готовые решения?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Язык программировани­я C++: сравнение с другими языками
Programming 06.02.2025
Современная разработка программного обеспечения предлагает множество языков программирования, каждый из которых обладает уникальными характеристиками и областями применения. C++ занимает особое место. . .
Язык программировани­­­я C++: достоинства и недостатки
Programming 06.02.2025
C++ считается одним из самых влиятельных языков программирования, продолжающим занимать ведущие позиции в мире разработки программного обеспечения. Этот язык появился как расширение языка C с. . .
Регулярные выражения в Python
BasicMan 06.02.2025
Регулярные выражения - это последовательности символов, определяющие правила поиска и сопоставления текстовых данных. В Python они используются для поиска подстрок, проверки соответствия текста. . .
Как создать свой мод для Майнкрафт с нуля на Java
IT_Exp 06.02.2025
Разработка мода для Minecraft начинается с правильной настройки среды разработки. Для создания мода потребуется Java Development Kit (JDK), интегрированная среда разработки и Minecraft Forge. JDK. . .
Async/await и асинхронное программировани­е в Java
IT_Exp 06.02.2025
Асинхронное программирование - это подход к организации вычислительных процессов, позволяющий приложениям эффективно использовать доступные ресурсы системы. В контексте Java этот метод приобретает. . .
Как исправить android.os.Netw­orkOnMain­Thread­Exception
hw_wired 06.02.2025
Исключение NetworkOnMainThreadException возникает при попытке выполнить сетевые операции в главном потоке Android-приложения. Главный поток отвечает за обработку пользовательского интерфейса и должен. . .
Как в Java определить, что массив содержит определенное значение
hw_wired 06.02.2025
В Java класс Arrays предлагает несколько способов для проверки наличия значений в массивах. Наиболее широко применяемый метод заключается в использовании комбинации Arrays. asList() и contains(). . . .
Как использовать virtualenv в Python. Виртуальные среды/окружения
hw_wired 06.02.2025
В Python виртуальные окружения решают одну из ключевых задач разработки - изоляцию зависимостей между проектами. Virtualenv создает отдельное пространство для каждого проекта, где устанавливаются. . .
Кнопка в HTML, которая работает как ссылка
hw_wired 06.02.2025
В HTML существует несколько подходов к созданию кнопки, которая функционирует как ссылка. Базовым элементом выступает тег button, который можно преобразовать в ссылку с помощью JavaScript. Для этого. . .
Как обновить страницу с помощью JavaScript
bytestream 06.02.2025
JavaScript предоставляет несколько базовых методов для обновления веб-страницы, которые встроены непосредственно в язык и доступны через объектную модель браузера. Основной метод обновления страницы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru