![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Возникла проблема... Все наверное знают как кодируется base64 кто незнает сейчас расскажу =)
в принцепе неважно как это всё кодируется но допустим есть файл в нём 17 строк по 76 символов и одна строка около 16 символов. Вот мне нужно както передать всё это дело по SMTP но чтоб размер после передачи файла не изменился... Я пытался вчера один рас размер файла вышел такой какой нужно... Но пришлосб в ручную считать строки и указывать сколько их. После я попытался читать файл по символам... Зазмер увеличился на несколько байт может это и неочень страшно но файл при постоянной передаче будет постоянно расти а это не есть хорошо =\ Вопрос как средствами WinAPI в среде Visual C++ узнать сколько строк в файле ? Точнее мне както нужно узнать сколько там строк а после прочитать каждую строку по 76 символов... Я пытался парсировать таким методом:
Вот примерно так я и читал + пытался по 2 символа. + SetFilePointer Вобшем много чего пытался... Не очень получилось... Вопрос как узнать сколько в файле строк желательно средствами WinAPI + ReadFile. --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: нет Всего: 38 |
А что ReadFile это разве не WinAPI? да и по чему ты не хочешь воспользоваться STL -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Кажется это одно из первых заданий в КерниганРичиЯзыкПрограммированияСи
--------------------
|
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
На сколько я помню там чистый C++
Мне нужен минимальный размер и максимальная производительность =\ В проекте Используется немного C + WinAPI + ASM --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
вопрос остаётся не решонным.
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Что конкретно тебя интересует? Сам алгоритм определения числа строк или его реализация вкупе с WinApi? Обычный поиск всех символов переноса строки(0x0A) вполне подойдёт, есть конечно и более эффективные алгоритмы, но и при простом поиске символа переноса производительность определяется миллионами строк за 1/2 секунды, примерно.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Тоесть использовать метод парсинга который использовал я но указывать 0x0D и 0x0A..
Если нет то можно примерчик плзззз... ![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Ну ты искал строки '13' '10', а надо искать числовые значения(коды символов). 0x0A - это 10 в шестадцатиричном представлении, ну стыдно такое не знать программисту. Если у тебя большой файл(> 30-40 мегабайт) читай блоками по 4096 байт или скидывай файл в своп(Memory Mapped Files) и ищи в них байты со значением 10. Вот и весь алгоритм.
Это сообщение отредактировал(а) W4FhLF - 24.1.2007, 17:08 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
drZmeu |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Мда.......
Мне бы с использованием ReadFile + я знаю что такое HEX... Добавлено @ 17:19 Ок вопрос №2... Почему когда я читаю файл примерно вот так: [code=cpp] DWORD iByte; char buf[1]; HANDLE THREAD; for(DWORD i=0;i<fsize;i++) { SetFilePointer(THREAD,i,0,NULL); ReadFile(THREAD,buf,1,&iByte,NULL); send(s,buf,strlen(buf),0);
Получается такая тема что в файле до кодирования в base64 всё ок. после передачи файла... Он перекодируется автоматом в нормальный вид: у меня получается какоето смешение мне кажется я передаю немного лишней информации... + файл увеличивуается на несколько байт =\ Добавлено @ 17:20 Блин =(
--------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
||||
|
|||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Вот тебе код, который считает кол-во строк в файле, реализовано всё на WinApi.
Это сообщение отредактировал(а) W4FhLF - 24.1.2007, 17:33 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: нет Всего: 1 |
Во пасибо большое
![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |