![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Доброго времени суток!
Всю жизнь сидел на C++Builder, но благодаря обитателям этого (и не только) форума, решил освоить что-нибудь еще. И поставил себе Visual Studio 2008 и создал проект на C# (прошу прощения, но раздела по нему не нашел, потому пишу сюда). И сразу мне этот язык понравился, но вопросов возникла масса. Раньше я терпеть не мог указатели. И только сейчас, когда их лишился, понял - какая это замечательная штука! Возникло масса вопросов, касательно порта CB-проекта на новую основу. В частности: 1) Есть структура с разнообразным содержимым, в том числе вложенными структурами и битовыми полями - как считать ее (или в нее - как правильно?) из файла? В C++ это делалось элементарно, но здесь указатель не передашь, да и функции наверняка уже нет... Так что вопрос - как или лучше даже чем ее считать? Очень желательно с коротеньким примером. 2) Есть древо каталогов на основе TreeView (первый раз его сам писал, так что, может, не в ту сторону копал...). Ноды можно помечать флажками. Задача - сделать поиск файлов только внутри помеченных флажками каталогов и вывести список файлов. Если бы шли они по порядку, да с самого верха (от диска), то проблем бы не было. А так сам диск может быть и не помечен - вначале нужно сформировать массив помеченных нодов. И вот тут очередной ступор - как? Написал функцию, но, видимо, не верно:
Возможно есть более простой способ или... или вообще - способ. ^^ Буду рад любой помощи! |
|||
|
||||
Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
если вновь создаваемая, то я бы сериализовал просто |
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Вопрос с TreeView снимается. Я забыл о возможности создать "глобальный" массив и использовтаь его без всяких указателей. Ко всему прочему алгоритм работы был несколько изменен, наследуемое выделение убрано, а пометки сохраняются в-, и удаляются из- массива сразу после тыка по флажку.
Heinzz Вот то жуткое слово я уже встречал. Что это такое и как этим пользоваться? Как уже говорил - с примером, если не сложно. И еще немного не понял, что имелось ввиду под "вновь создаваемая". Есть структура. struct SomeStruct { int a; char b[32]; char c:1; char d:2; char e:1; }; Есть файл, вначале которого идут 37 байт, которые нужно считать, соответственно раскидав по структуре. Первые 4 - в int a, следующие 32 - в char [] b, а последний разбить побитно. |
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Неужели никто не знает? Чтобы было нагляднее, приведу кусок из программы на BCB - его-то и надо портировать на C#
... или, как вариант - расширение для C#, позволяющее это делать. Например - оформить это вот в качестве функции в C++, отправить в библиотеку и подключить к C#... Или еще что-нибудь... Если есть идеи - поделитесь пожалуйста! Только с примерами - я еще только учусь, а в мелкомягкой справке сам черт ногу сломит... да и термины там жуткие... >_> |
|||
|
||||
KuMa1104 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
И взял земли и воды, и смешал их, и создал он тварей водяных и гадов с холодной кровью. И взял он воды и огня, и.. ![]() Почитайте про сериализацию рекомендую Троелсен Эндрю С# И платформа НЕТ! Вот это от туда
Это сообщение отредактировал(а) KuMa1104 - 19.2.2010, 23:59 -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
KuMa1104
Спасибо, суть понял! Попробую написать у себя по аналогии с твоим примером. Если не получится... придется и впрямь читать книжку, хотя не люблю я это дело... один единственный раз мне понравилось читать док по C++, на каком-то сайте. Но там очень хорошо материал подавался. Что поделать - самоучка, мне легче по чужим скриптам учиться, чем по докам. =\ |
|||
|
||||
EqKeeper |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Ехаем дальше. С се... сериализацией и де... десериализацией своих объектов я разобрался. Собрал структуру, сделал ее сериализируемой, изменил, сохранил в файл, потом считал - все прекрасно.
Но когда попытался таким образом считать файл, получил следующую ошибку:
Оно и понятно - если открыть файл блокнотиком, можно увидеть такую картину:
Тобишь, сохраняя файл, он записывает туда кучу дополнительной информации для ее считывания. В готовом файле (в данном примере - mp3) понятное дело такой информации нет. Есть лишь последовательность байт, которую нужно прочитать и рассортировать по структуре. Смещение 0, длина 4 - это вот первое поле. Смещение 4 длина 16 - это второе и т.д. Привожу код, надеюсь, что поможете разобраться - что я делаю неправильно... (записываю я класс или структуру - значения не имеет, видимо, потом что все они наследники object).
|
||||||
|
|||||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Ммм... спасибо, посмотрю...
P.S. Уже объяснили, что сериализация в моем случае не подходит. |
|||
|
||||
Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
напишите свой простой класс для чтения таких файлов. Вновь создаваемая - я имел в виду что если читать файлы уже сгенерированные не сериализацией то сериализация Вам не подходит, тк файлы имеют различный формат, в файле полученном путем сериализации есть информация о сохраненной структуре, а в Вашей последосательности байтов нет.
открывайте поток и если знаете в какой последовательности записаны байты используйте ReadInt ReadChar .... |
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Heinzz
Да, с сериализацией я уже понял. А жаль. =\ Класс это конечно хорошо, но хочется универсализации. =\\ В BCB было все так просто и удобно... А здесь целый класс... =\\\ KelTron Раскурочил ту демку. Большущее спасибо. Файл считал всеми тремя способами. Структуру заполнил - все прекрастно. Проблема одна - я не могу вытащить из файла строки. Предположим, у меня есть строка длиной 12 байт. В структуре я ее записываю как указано в той демке:
Целочисленные данные до и после нее считываются на ура. Если же попробовать считать после прочтения some_struct.date.toString(), то для любого файла я получаю "System.Byte[]" или "System.Char[]", если пытаюсь считать как char'ы. Попытка выставить string вызывает ошибку TSize. Что делать? Что я делаю неправильно? |
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: 11 Всего: 38 |
Кодировку смотри сам, какая нужна. Это сообщение отредактировал(а) KelTron - 22.2.2010, 13:09 -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Большущее спасибо! Попробую.
|
|||
|
||||
EqKeeper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 13.2.2010 Репутация: нет Всего: нет |
Все работает! Еще раз спасибо!
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |