![]() |
[c/c++] Новичкам: задаем вопросы
В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.
|
Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)
|
Цитата:
|
27.05.2007 18:14:51, KEZ
KEZ: Код:
#include <stdio.h>27.05.2007 18:15:00, KEZ запости *** я забанен( |
Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
пример: FILE *f = fopen( "http://sait.com", "r" ); может вопрос мой некоректен , но я думаю поймут ))) |
Цитата:
от кеза: 27.05.2007 18:43:17, KEZ #include <stdio.h> #include <winsock2.h> // хедер с описанием wsa ф-ий // для ms vc++6.0 и др - подключаем lib'у с импортами wsa ф-ий #pragma comment( lib, "wsock32.lib" ) int main(int argc, char* argv[]) { char request[1024*5]; // буффер под запрос char response[1024]; // буффер под ответ sockaddr_in s_a; WSADATA wd; // структура WSADATA WSAStartup( MAKEWORD( 2, 2 ), &wd ); // инициализируем wsa SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // создаем сокет if (s == INVALID_SOCKET) return 255; // если ошибка - выход s_a.sin_addr.s_addr = inet_addr( "89.108.80.80" ); // айпи сервера, в данном случае - античат.ру s_a.sin_port = htons( 80 ); // порт сервера s_a.sin_family = AF_INET; if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - невозможно подключится к сереверу char url[] = "/"; // страница char host[] = "antichat.ru"; // хост // формируем запрос sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host ); send( s, request, strlen( request ), 0 ); // послать запрос recv( s, response, 1023, 0 ); // максимум получить 1023 байта printf( "%s\r\n", response ); // вывести ответ на экран closesocket( s ); // закрываем сокет WSACleanup(); // деинициализируем wsa return 0; } 27.05.2007 18:45:56, KEZ отпиши от меня кроме кода вот что 27.05.2007 18:46:28, KEZ "далее обрезай шапку ответа сервера (HTTP/1.1 200 OK и т.п.), все оставшееся - будет то, что вернул сервер по запрошеному адресу, например /1.txt. Другие варианты с winapi - InternetReadFile(), UrlDownloadToFile() см. msdn..." 27.05.2007 18:45:09, KEZ "альт. вариант - InternetReadFile()" 27.05.2007 18:45:12, KEZ отпиши |
спасибо KEZ и _Great_ ))) дальше я сам поисом
|
Цитата:
Код:
|
Вопрос: idHTTPServer ... сохранение удаленного файла на винте(через браузер)...
TFileStream *fs=new TFileStream(MyFile,fmOpenRead); try { ResponseInfo->ResponseNo=200; ResponseInfo->ContentLength= fs->Size; ResponseInfo->ContentStream=fs; ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); ... Сохраняет файл , но в начале файла записывает инфо с запроса (Server: Indy, Content-Length и др) , что в свою очредь убивает его работоспособность... как сделать ,чтоб файл нормально записался??? |
у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ...
Принимает же обычный браузер... считываю же файл для отправки сразу потоком: TFileStream *fs=new TFileStream(MyFile,fmOpenRead); ResponseInfo->ContentStream=fs; //где ResponseInfo - ответ на запрос... забавно, но если убрать строчку : ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); , то файл сохранится правильно, но под кривым именем и без расширения... |
... и опять я сам во всем разобрался ,
строка ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); при добавке первого нового хедера сама формирует остальные , причем вырезать их никак... Выход нашел в такой же степени дурацкий, в какой и гениальной: в к Content-type прибавляем свою строку с пробелами...(тоесть не используем метод Headers->Add) ResponseInfo->ContentType=IdHTTPServer1->MIMETable->GetFileMIMEType(MyFile) + "\r\nContent-Disposition: attachment; filename=" + MyFile; при этом никаких символов новых строк в конце, иначе они запишутся в отсылаемый файл... ...блин , пол вечера убил на это... |
sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.
|
Вот такой вот вопросик возник:
Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот. |
Смотри:
Код:
#include "vcl.h" |
Цитата:
Joker-jar, лол, а если VCL нету? |
Если я не ошибаюсь, есть Api функция.
|
Я показал, как сделать это максимально абстрактно... Если и это не то, то хз.
Код:
Но, без всяких malloc, calloc , new и т.д |
Цитата:
|
sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого.
зы. только это не часть С++, это stl. большая разница |
Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера
|
Stl в любой нормальный компилер входит.
А ты уверен что твой Vcl скомпилится в любом компилере просто так? Его еще сливать отдельно надо. Я тоже могу написать супер-пупер библиотеку. А смысл? В Stl есть все, что нужно. Ну, или почти всё. |
Цитата:
С каких пор STL перестал быть частью C++? Цитата:
|
с каким пор вещь, сделанная на инструменте, является частью инструмента?
хотя отчасти это и часть С++... вообщем тавтология какаято ) |
Цитата:
А Stl — часть C++ Great: Часть, не часть - спорить бесполезно =) Ладно, заканчиваем оффтоп :) |
wtf системные переменные дайте почитать!
|
Цитата:
ну а инструментом уже можно считать отдлельные реализации c++, такие как microsoft, borland, gcc и пр. при этом чтобы инструмент имел в названии слово "с++" обязан поддерживать stl. |
что такое препроцессор и метапрограммирование?
в какой переменной лежит длинна строки(класс string)? как построчно читать файл в вектор до конца файла(библиотека fstream)? как работать с tcp/ip в с++? |
Цитата:
Цитата:
|
Цитата:
Цитата:
В двух словах: socket создает сокет, connect соединяется с хостом, send/recv отправляет/получает данные. |
Цитата:
|
ну юзай тогда API функцию - VirtualAlloc
|
Тема разделена. Триграфы в C/C++
|
Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.
|
Получить параметры видеорежима через прерывание Bios'а номер 10 (если под досом)
|
Разобрался с malloc`ом.
http://www.codenet.ru/progr/visualc/esmall/add.txt Мож кому пригодится. |
более-менее выучил с++ какой api учить?
|
Цитата:
mov AH, 0Fh int 10h Тогда в AL будет номер режима. Но нафик это тебе? Текстовых режима по размерам всего два: 25*40 и 25*80. Поэтому в любом случае количество символов на одной строке - 25 (обычно, если ты конечно не будешь извращаться с текстом в графическом режиме - тут уже только прямым посчетом). |
2scrat программируешь под win32 - winapi32, под юникс-системы posix, systemv и т.п. но первого я думаю хватит...
|
Цитата:
|
Цитата:
|
| Время: 06:32 |