Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12

Работа с текстовым файлом

26.05.2019, 22:35. Показов 2326. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как взять первую строку из текстового файла с удалением этой первой строки?
К примеру путь к файлу: C:\Test.txt
И желательно, чтоб в многопоточности быстро работало.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2019, 22:35
Ответы с готовыми решениями:

Работа с текстовым файлом C#
Всё компилится но нет файл пуст, в чём может быть дело? StreamWriter usersFile = new StreamWriter("users.txt", true); ...

Работа с текстовым файлом
Есть текстовый файл примерно следующего содержания: //комментарий variable1 value1 variable2 "value2" variable3 10 ...

Работа с текстовым файлом
Вообще-м,хочу сделать штучку,где пользователь вводит свои инициалы,и как бы заходит в свою статистику.Попробую объяснить: дан текстовый...

13
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
26.05.2019, 22:56
Цитата Сообщение от royalstar Посмотреть сообщение
Как взять первую строку из текстового файла с удалением этой первой строки?
Ни как.
Файл - это последовательный поток. Для его изменения, в том числе удаления какой-то части, необходимо полностью его перезаписывать.
Как вариант на это место можно какую-то иную информацию.
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
26.05.2019, 23:21
Как нибудь так

C#
1
2
3
4
5
6
string[] data = File.ReadAllLines(@"C:\Test.txt");
string firstLine = data.First();
string[] newData = new string[data.Length - 1];
for (int i = 1; i < data.Length; i++)
     newData[i - 1] = data[i];
File.WriteAllLines(@"C:\Test.txt", newData);
1
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12
27.05.2019, 00:34  [ТС]
В данный момент так юзаю.
C#
1
2
3
4
5
6
7
8
private static readonly object locker = new object();
 lock (locker)
{
List<string> quotelist = File.ReadAllLines(folder).ToList();
str = quotelist[0];
quotelist.RemoveAt(0);
File.WriteAllLines(folder, quotelist.ToArray());
}
0
9 / 5 / 5
Регистрация: 08.02.2019
Сообщений: 32
27.05.2019, 05:02
Pilarentes,
у тебя строчка
C#
1
//string firstLine = data.First();
лишняя/нерабочая, а так классно решил.
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
27.05.2019, 09:08
Bentax, В условии задачи
Цитата Сообщение от royalstar Посмотреть сообщение
взять первую строку из текстового файла
вот эта переменная и есть первая строка, с ней автор может производить нужные действия
0
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12
07.06.2019, 18:56  [ТС]
Есть ещё какой-то вариант для многопоточности?
Этот медленный:
C#
1
2
3
4
5
6
7
8
9
private static readonly object locker = new object();
 lock (locker)
{
List<string> quotelist = File.ReadAllLines(folder).ToList();
str = quotelist[0];
quotelist.RemoveAt(0);
File.WriteAllLines(folder, quotelist.ToArray());
quotelist.Clear();
}
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.06.2019, 19:05
Может стоит пересмотреть сам принцип работы? Зачем каждый раз брать строку из файла, потом её удалять, перезаписывать файл? Можно ведь загрузить все строки 1 раз в какой нибудь список, и из него удалять. А когда работа завершена, записать оставшиеся строки (если таковые имеются) в файл...
0
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12
07.06.2019, 19:11  [ТС]
Так не получится, список обновляется другой программой и мне нужно от туда брать первую строку в 15000 потоков.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.06.2019, 19:15
Цитата Сообщение от royalstar Посмотреть сообщение
Так не получится, список обновляется другой программой и мне нужно от туда брать первую строку в 15000 потоков.
Ничего не мешает периодически загружать данные из файла в список и работать со списком... Что именно делает другая программа? Добавляет новые данные? Тоже может удалять/изменять существующие строки?

15000 потоков тут точно не нужно.

Кстати, как вы разруливаете ситуацию когда ваши 15000 потоков пытаются перезаписать файл в то время, когда другая программа пытается обновить файл?
0
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12
07.06.2019, 19:36  [ТС]
Другая программа добавляет туда строки, которые мне нужно брать от туда, буквально каждую секунду по несколько сотен.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static readonly object locker = new object();
do
{
try
{
 lock (locker)
  {
  List<string> quotelist = File.ReadAllLines(folder).ToList();
  str = quotelist[0];
  quotelist.RemoveAt(0);
  File.WriteAllLines(folder, quotelist.ToArray());
  quotelist.Clear();
  }
}
  catch 
  { 
  await Task.Delay(50);
  }
}while (string.IsNullOrEmpty(str));
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.06.2019, 19:42
Цитата Сообщение от royalstar Посмотреть сообщение
по несколько сотен
Так по несколько сотен, или
Цитата Сообщение от royalstar Посмотреть сообщение
взять первую строку из текстового файла

И вообще у вас какая-то мутная задача от уже которой попахивает говнокодом (я про 15000 потоков).

Что за другая программа? Если ли возможность изменить принцип её работы?

Если бы вы объяснили что именно вы делаете и зачем, думаю можно было бы найти более оптимальное решение...
0
0 / 0 / 0
Регистрация: 23.01.2019
Сообщений: 12
07.06.2019, 19:43  [ТС]
Одну для одного потока.
Есть 15000 аккаунтов, нужно чтоб все одновременно работали и брали со списка первую строку.
Другая программа ZennoPoster, с ней всё в порядке, записывает хорошо строки. Проблема в медленном взятии, хотя не исключаю "говнокод")
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
07.06.2019, 20:47
У вас тут как минимум проблема в том что вы читаете/записываете файл в 15000 раз больше чем это необходимо...
Ну и 15000 потоков это тоже ненормальное явление...

Попробуйте применить вот этот класс у себя...

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
    class DataProvider
    {
        private Queue<string> _data = new Queue<string>();
 
        private static readonly object locker = new object();
 
        private Thread worker;
 
        private const string file = "input.txt";
 
        public DataProvider()
        {
            worker = new Thread(Work) { IsBackground = true };
            worker.Start();
        }
 
        private void Work()
        {
            while (true)
            {
                if (File.Exists(file))
                {
                    string[] lines = File.ReadAllLines(file);
 
                    lock (locker)
                    {
                        foreach (var line in lines)
                            _data.Enqueue(line);
                    }
 
                    File.Delete(file);
                }
                Thread.Sleep(1000);
            }
        }
 
        public string GetData()
        {
            lock (locker)
            {
                if (_data.Count > 0)
                    return _data.Dequeue();
                else
                    return null;
            }
        }
    }
В ваших потоках вместо

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static readonly object locker = new object();
do
{
try
{
 lock (locker)
  {
  List<string> quotelist = File.ReadAllLines(folder).ToList();
  str = quotelist[0];
  quotelist.RemoveAt(0);
  File.WriteAllLines(folder, quotelist.ToArray());
  quotelist.Clear();
  }
}
  catch 
  { 
  await Task.Delay(50);
  }
}while (string.IsNullOrEmpty(str));
используйте что нибудь типа

C#
1
str = dataProvider.GetData();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2019, 20:47
Помогаю со студенческими работами здесь

Работа с текстовым файлом
Доброго времени суток, прошу вашего совета, начинаю не как все с &quot;Hello, world&quot;, а сразу на амбразуру =) Даны *.txt файлы, имеющие дату в...

Работа с текстовым файлом в с#
У меня возникло несколько вопросов по поводу c#. Как в c# в уже созданный текстовый документ вставлять строки? И можно ли сделать поиск по...

Напечатать первый символ каждой строки файла
Недавно начал изучать C#... Не могу написать одну программку... Дан текстовый файл. Напечатать первый символ каждой строки.

Работа с текстовым файлом
Здравствуйте, надо найти в файле по ключу слово, номер строки этого слова и вернуть это дело из функциии, подскажите как? Как я...

Работа с текстовым файлом.
Дан текстовый файл. Найти номер самой короткой строки. Помогите, пожалуйста, решить.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru