Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

передача побайтно

290
05 февраля 2010 года
Patr1ot
458 / / 09.02.2008
Здраствуйте уважаемые форумчане...

у меня к вам небольшой вопрос.
Имеется файл в сети возможен ли такой способ его копирования:
по действиям:
1) узнаем размер файла
2) присваеваем каждому байту свой порядковый номер
3) создаем два потока
4) каждый поток копирует свои номера байт из удаленного файла


Возможно ли организовать такую работу копирования?
Подскажите в какую сторону копать пожалуйста...
Страницы:
7
23 февраля 2010 года
@pixo $oft
3.4K / / 20.09.2006
Правильно,файл надо открывать на дозапись.Или,если у вас buf1 и buf2 расположены друг за другом,то можно записать их вместе
Флаг должен зваться как-то со словом Append.Не понимаю,какая проблема посмотреть все имеющиеся флаги и найти нужный
16K
24 февраля 2010 года
asmforce
186 / / 05.01.2010
Цитата: @pixo $oft
Правильно,файл надо открывать на дозапись.Или,если у вас buf1 и buf2 расположены друг за другом,то можно записать их вместе
Флаг должен зваться как-то со словом Append.Не понимаю,какая проблема посмотреть все имеющиеся флаги и найти нужный



Согласен. Но можно и по-другому: сразу в файле зарезервировать необходимое место. Кроме того, раз при втором открытии файла он авт. обнуляеццо, значит где-то есть флаг TRUNC (от truncation), - его надо нейтрализовать.

290
02 марта 2010 года
Patr1ot
458 / / 09.02.2008
Люди у меня к вам еще вопрос...

Можно ли работать с файлом через протокол HTTP?

Тоесть чтобы я мог считать информацию из файла по протоколу HTTP, например:

TFileStream* Stream1= new TFileStream("http://66.ru/index.html",fmOpenRead);

Очень надо кто знает подскажите плз...
7
02 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Неужели легче запостить на форум и ждать ответа неизвестно сколько,чем попробовать самому?Это же так легко!
290
02 марта 2010 года
Patr1ot
458 / / 09.02.2008
Цитата: @pixo $oft
Неужели легче запостить на форум и ждать ответа неизвестно сколько,чем попробовать самому?Это же так легко!



Увы но я новичек, мне такие вещи не очевидны...
Я конечно пытался самостоятельно, но резултат неутешительный, ничего невышло...

7
02 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
:DА что тут пытаться для неновичков?Вставил код и пожалуйста!

Ну а если пробовали и не вышло,значит,ответ на вопрос–"Нельзя"(посредством TFileStream)
290
02 марта 2010 года
Patr1ot
458 / / 09.02.2008
Цитата: @pixo $oft
:DА что тут пытаться для неновичков?Вставил код и пожалуйста!

Ну а если пробовали и не вышло,значит,ответ на вопрос–"Нельзя"(посредством TFileStream)



Ну может просто мне мои знания непозволяют решить эту задачу...

Разве так сложно подсказать куда копать...

7
02 марта 2010 года
@pixo $oft
3.4K / / 20.09.2006
Для начала ответьте на вопрос:вы сами свой код пробовали?
А общее решение–InternetOpen и иже с ним(если,конечно,вы не брезгуете API)
290
03 марта 2010 года
Patr1ot
458 / / 09.02.2008
Цитата: @pixo $oft
Для начала ответьте на вопрос:вы сами свой код пробовали?
А общее решение–InternetOpen и иже с ним(если,конечно,вы не брезгуете API)



Ну как бы я делал вот так, и все работает, просто мне нужно в 2 потока, копировать файл, а в данном случае невозможно указать компоненту IdHTTP1 копирование половины файла от 0 до середины файла...

 
Код:
TFileStream* fs = new TFileStream("1.txt", fmCreate|fmOpenWrite);
IdHTTP1->Get("http://1.txt", fs);
delete fs;


Тоесть задача копирование в 2 потока по пол файла... через протол HTTP.
14
03 марта 2010 года
Phodopus
3.3K / / 19.06.2008
 
Код:
TFileStream * Fi = new TFileStream("C:\\1.txt",fmShareDanyNone);

 
Код:
TFileStream* fs = new TFileStream("1.txt", fmCreate|fmOpenWrite);

это ппц. справку-то по флагам переведите и прочитайте..
290
03 марта 2010 года
Patr1ot
458 / / 09.02.2008
Цитата: Phodopus
 
Код:
TFileStream * Fi = new TFileStream("C:\\1.txt",fmShareDanyNone);

 
Код:
TFileStream* fs = new TFileStream("1.txt", fmCreate|fmOpenWrite);

это ппц. справку-то по флагам переведите и прочитайте..



Читал вот пожалуйсто:

Цитата:

fmCreate
создать новый файл. Если файл существует, то открывается в режиме чтения.
fmOpenRead
открыть для чтения.
fmOpenWrite
открыть для записи.
fmOpenReadWrite
открыть и для того, и для другого.
fmShareCompat
совмещенный режим доступа.
fmShareExclusive
эксклюзивный режим. Ни одно приложение не может читать или записывать открытый файл.
fmShareDenyWrite
запрет по записи для других приложений.
fmShareDenyRead
запрет по чтению.
fmShareDenyNone
никакого разделения ресурса.



Но вопрос то в другом...
С чтением локальных файлов проблем нет...
Но вот с чтением файлов через протокол HTTP есть, просто вставляю URL
Заместо "C:\\1.txt", после чего вылетает ошибка "Неудается найти файл"
Ипоказывает путь, в котором Путь_к_самой_программе+Указанное_URL...
как быть...
Вот вариант про InternetOpen хотел бы поподробней узнать реализацию...
с WinAPI пока неоченьто...
Просто непонятно как функция InternetOpen поможет организовать открытие файла через протокол HTTP для потока созданного методом TFileStream...
Ведь по сети InternetOpen это и есть поток? или я ошибаюсь, и помойму в нем тоже есть параметры,(или подобие параметров Seek, Position)

290
13 марта 2010 года
Patr1ot
458 / / 09.02.2008
Подскажите, пожалуйста, может я что то неправильно делаю...

Код:
#include <vcl.h>
#include <wininet.h>
#include <fstream>
#pragma hdrstop

#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment(lib, "C:\Program Files\CodeGear\RAD Studio\5.0\lib\psdk\wininet.lib")
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button1Click(TObject *Sender)
{
bool OnLine = false;
DWORD state = FLAG_ICC_FORCE_CONNECTION;
OnLine = InternetCheckConnection ("http://www.ya.ru",state,0);
if(&#111;&#110;Line==true)
{

 ShowMessage("Соединение с интернет имеется!!");
 }
else
 {

 ShowMessage("Соединение с интернет отсутствует!!");
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button2Click(TObject *Sender)
{
TFileStream * Out = new TFileStream("http://files2.freesoft.ru/rep/4669/wrar392ru.exe",fmShareDenyNone);
TFileStream * In =  new TFileStream("C:\\Updates.exe",fmCreate|fmOpenWrite);
__try
{
  In->CopyFrom(Out,Out->Size);
}
__finally
{
 Out->Free();
}
In->Free();
}
//---------------------------------------------------------------------------


В выше написанном коде я попытался скачать файл из интернет потоком, но при выполнение команд описанном в обработчике Button2Click, вылетает ошибка:
Цитата:


Cannot open file "C:\Documents and Settings\user\Мои документы\Rad studio\Projects\Debug\http:\files2.freesoft.ru\rep\4669\wrar392ru.exe
Синтаксическая ошибка в имени файла, имени папки или метке тома



Подскажите что я неправильно делаю... библиотеку wininet.lib вроде подключил... но чего то все равно нехватает?
Неделю бьюсь, даж в инете инфы по этому поводу несмог найти...

1
13 марта 2010 года
kot_
7.3K / / 20.01.2000
Ошибка действительно в имени файла.
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?
1
13 марта 2010 года
kot_
7.3K / / 20.01.2000
Ошибка действительно в имени файла.
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?
290
19 марта 2010 года
Patr1ot
458 / / 09.02.2008
Цитата: kot_
Ошибка действительно в имени файла.
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?



Вы имеете ввиду, через функцию InternetOpen или какуюто другую...
Просто я читал о этой функции, там описывался ее функционал, она способна считывать не всю информацыю целиком из удаленного файла, тоесть, ей можно указать считать конкретные байты из файла, но как это работает, найти немогу....

14
22 марта 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Patr1ot
ей можно указать считать конкретные байты из файла, но как это работает, найти немогу....


[QUOTE=MSDN]InternetSetFilePointer()
InternetReadFile()
[/QUOTE]работоспособность зависит от веб-сервера на том конце.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог