передача побайтно
у меня к вам небольшой вопрос.
Имеется файл в сети возможен ли такой способ его копирования:
по действиям:
1) узнаем размер файла
2) присваеваем каждому байту свой порядковый номер
3) создаем два потока
4) каждый поток копирует свои номера байт из удаленного файла
Возможно ли организовать такую работу копирования?
Подскажите в какую сторону копать пожалуйста...
Флаг должен зваться как-то со словом Append.Не понимаю,какая проблема посмотреть все имеющиеся флаги и найти нужный
Флаг должен зваться как-то со словом Append.Не понимаю,какая проблема посмотреть все имеющиеся флаги и найти нужный
Согласен. Но можно и по-другому: сразу в файле зарезервировать необходимое место. Кроме того, раз при втором открытии файла он авт. обнуляеццо, значит где-то есть флаг TRUNC (от truncation), - его надо нейтрализовать.
Можно ли работать с файлом через протокол HTTP?
Тоесть чтобы я мог считать информацию из файла по протоколу HTTP, например:
TFileStream* Stream1= new TFileStream("http://66.ru/index.html",fmOpenRead);
Очень надо кто знает подскажите плз...
Увы но я новичек, мне такие вещи не очевидны...
Я конечно пытался самостоятельно, но резултат неутешительный, ничего невышло...
Ну а если пробовали и не вышло,значит,ответ на вопрос–"Нельзя"(посредством TFileStream)
Ну а если пробовали и не вышло,значит,ответ на вопрос–"Нельзя"(посредством TFileStream)
Ну может просто мне мои знания непозволяют решить эту задачу...
Разве так сложно подсказать куда копать...
А общее решение–InternetOpen и иже с ним(если,конечно,вы не брезгуете API)
А общее решение–InternetOpen и иже с ним(если,конечно,вы не брезгуете API)
Ну как бы я делал вот так, и все работает, просто мне нужно в 2 потока, копировать файл, а в данном случае невозможно указать компоненту IdHTTP1 копирование половины файла от 0 до середины файла...
IdHTTP1->Get("http://1.txt", fs);
delete fs;
Тоесть задача копирование в 2 потока по пол файла... через протол HTTP.
это ппц. справку-то по флагам переведите и прочитайте..
это ппц. справку-то по флагам переведите и прочитайте..
Читал вот пожалуйсто:
fmCreate
создать новый файл. Если файл существует, то открывается в режиме чтения.
fmOpenRead
открыть для чтения.
fmOpenWrite
открыть для записи.
fmOpenReadWrite
открыть и для того, и для другого.
fmShareCompat
совмещенный режим доступа.
fmShareExclusive
эксклюзивный режим. Ни одно приложение не может читать или записывать открытый файл.
fmShareDenyWrite
запрет по записи для других приложений.
fmShareDenyRead
запрет по чтению.
fmShareDenyNone
никакого разделения ресурса.
Но вопрос то в другом...
С чтением локальных файлов проблем нет...
Но вот с чтением файлов через протокол HTTP есть, просто вставляю URL
Заместо "C:\\1.txt", после чего вылетает ошибка "Неудается найти файл"
Ипоказывает путь, в котором Путь_к_самой_программе+Указанное_URL...
как быть...
Вот вариант про InternetOpen хотел бы поподробней узнать реализацию...
с WinAPI пока неоченьто...
Просто непонятно как функция InternetOpen поможет организовать открытие файла через протокол HTTP для потока созданного методом TFileStream...
Ведь по сети InternetOpen это и есть поток? или я ошибаюсь, и помойму в нем тоже есть параметры,(или подобие параметров Seek, Position)
#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(onLine==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 вроде подключил... но чего то все равно нехватает?
Неделю бьюсь, даж в инете инфы по этому поводу несмог найти...
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?
Почему вы не используете функции WinInet для работы с файлами? Обязательно рвать гланды через зопу?
Вы имеете ввиду, через функцию InternetOpen или какуюто другую...
Просто я читал о этой функции, там описывался ее функционал, она способна считывать не всю информацыю целиком из удаленного файла, тоесть, ей можно указать считать конкретные байты из файла, но как это работает, найти немогу....
[QUOTE=MSDN]InternetSetFilePointer()
InternetReadFile()
[/QUOTE]работоспособность зависит от веб-сервера на том конце.