Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировкой 
V
    Опции темы
GX777
Дата 18.10.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



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

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  Generator_Pleylista.rar 332,44 Kb
PM MAIL   Вверх
KelTron
Дата 19.10.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



Думаю такая кодировка тебе подойдёт..если нет пробуй "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"));
}
            



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
GX777
Дата 19.10.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



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 
PM MAIL   Вверх
KelTron
Дата 20.10.2009, 04:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



Что то ты мудришь с 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++)




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
GX777
Дата 20.10.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Блин,ты прав),KelTron. Огромное спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.3059 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.