Nonpacie
@Nonpacie

Почему при записи данных в файл сам поток обрывается не выдавая исключений?

Имею код, который по пути к папке, берёт все мп3 файлы, считывает теги исполнителя и название, и выводит их в текстовый файл построчно. Вроде бы всё работает, но буквально под конец ~(1180\1200) обрывает запись посредине строки и заканчивает исполнение не доходя до конца списка файлов и даже не дописывая исполнителя и название до конца.

Скр*птонит - Цепи (feat. 104)(ОК)

Скр*птонит - Я не <-(???Так не должно быть)

Ну и вопрос собственно, что могло пойти не так?

КОД:
using System;
using System.IO;
using System.Text;
using TagLib;
//using File = TagLib.File;

namespace mp3ToSpotify
{
    internal class Program
    {
        private static void Main()
        {
            //Директория с музыкой
            var dir = new DirectoryInfo(@"F:\Music");

            //Экземляр потока файлов
            FileStream fs = null;

            //Экземпляр класса для ображениям к тегам
            TagLib.File tagFile = null;

            //Создаем поток данных в указаный файл
            fs = new FileStream(@"F:\music10.txt", FileMode.Create);

            var sw = new StreamWriter(fs, Encoding.UTF8);
            
            //За каждую итерацию мы перебираем каждый последующий файл, подставляя путь к каждому последующему файлу в
            //tagFile. После обращаясь уже к самому файлу берём тег исполнителя и названия песни и вписываем в файл построчно.
            foreach (var file in dir.GetFiles("*.mp3"))
                try
                {
                    tagFile = TagLib.File.Create(file.FullName);
                    sw.WriteLine("{0} - {1}", string.Join(", ", tagFile.Tag.Performers), tagFile.Tag.Title);
                }
                catch (CorruptFileException)
                {
                    Console.WriteLine("Error!");
                    throw;
                }
            Console.WriteLine("Finish!");
        }
    }
}
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
А файл кто закрывать будет, Flush вызывать для сброса на диск кешированных данных?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Qualiant
Ещё можно для упрощения жизни, использовать using, который сам вызовет Dispose, который сам сделает все нужные процедуры.

using(fs = new FileStream(@"F:\music10.txt", FileMode.Create))
{
    using(var sw = new StreamWriter(fs, Encoding.UTF8))
    {

    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы