Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Проблема с кодировкой


Автор: GX777 18.10.2009, 22:41
В общем захотел я сделать программку, которая генерирует плейлист из 150 музыкальных файлов.Организовал поиск всех мп3 файлов в заданной папке(както).Организовал запись этих 150 песен в файл с расширением M3U.Открываю его в блокноте - есть эти 150 файлов.но когда закидываю этот файл в, допустим, AIMP, то он пишет что не может найти ни одного файла. Открыл через программу Notepad++ и с помощью функции поменял кодировку текста.Работает плейлист. Но когда я пытаюсь программно записать в другой кодировке,то проигрыватель все равно не хочет проигрывать мой плейлист.С помощью с шарп все кодировки перепробовал. Ни фига.Помогите кто может. Вот исходник.Заранее огромное  спасибо тем, у кого хватит терпения разобраться в моем коде. 

Автор: KelTron 19.10.2009, 19:27
Думаю такая кодировка тебе подойдёт..если нет пробуй "utf-8"
Вообще я слегка упростил твой код - заменил 2 строчками кода

Код

if(saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName.Length > 0)
{
    string[] files = Directory.GetFiles(textBox1.Text, "*.mp3", SearchOption.AllDirectories);
    File.WriteAllLines(saveFileDialog1.FileName, files, Encoding.GetEncoding("windows-1251"));
}            


Если нужно именно не больше 150 файлов, то так:
Код

if(saveFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.FileName.Length > 0)
{
    string[] files = Directory.GetFiles(textBox1.Text, "*.mp3", SearchOption.AllDirectories);
    File.WriteAllLines(saveFileDialog1.FileName, files.Take(150).ToArray(), Encoding.GetEncoding("windows-1251"));
}
            

Автор: GX777 19.10.2009, 22:39
KelTron,ты открыл мне глаза на то,что я слегка намудрил с поиском файлов в директориях))).По поводу кодировки.Мне важно чтоб выбиралось именно 150 рандомных файлов,поэтому я постарался адаптировать твой код к моему.Когда увидел твой код,а именно кодировку "windows-1251",то подумал что проблема в том что я не пробовал эту кодировку.Пишу вот так.
Код

public void SaveList(ArrayList Spisok)
        {
        
            Random rand = new Random();
            Encoding Kod = Encoding.GetEncoding("windows-1251");
        
            StreamWriter Potok = new StreamWriter(saveFileDialog1.FileName);
            
            for (int i = 0; i < 150; i++)
            {
                int nomer = rand.Next(0,Spisok.Count); 
                
                byte[] encodebytes = Kod.GetBytes(Spisok[nomer].ToString());
                Spisok.Insert(nomer,Kod.GetString(encodebytes));
                
                Potok.Write(Spisok[nomer] + "\r\n" + "\r\n");
                Spisok.RemoveAt(nomer);
            }
            
            Potok.Close();
        
        }

Проигрыватель все равно не хочет принимать мой плейлист.Твой же вариант он принимает.Не могу понять в чем еще моя ошибка smile 

Автор: KelTron 20.10.2009, 04:54
Что то ты мудришь с Encoding, если слегка изменить твою функцию то так:
Код

public void SaveList(ArrayList Spisok)
{

    Random rand = new Random();

    StreamWriter Potok = new StreamWriter(saveFileDialog1.FileName, false, Encoding.GetEncoding("windows-1251"));

    for (int i = 0; i < 150; i++)
    {
        int nomer = rand.Next(0, Spisok.Count);

        Potok.Write(Spisok[nomer] + "\r\n" + "\r\n");
        Spisok.RemoveAt(nomer);
    }

    Potok.Close();

}

Правда в твоём коде если список меньше 150, то будут выполняться лишние ненужные итерации, надо добавить проверку:
Код

for (int i = 0; i < 150 && Spisok.Count > 0; i++)


Автор: GX777 20.10.2009, 10:00
Блин,ты прав),KelTron. Огромное спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)