Некорректная работа FtpGetFile()
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Некорректная работа FtpGetFile() - 2009-04-30 13:02:44.133333
|
|
|
opiume123
Сообщений: 3
Оценки: 0
Присоединился: 2009-04-30 12:52:16.470000
|
Прошу помощи. Я использую Visual C++ 9.0. #include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
#include <stdlib.h>
#include <fstream>
#include <iostream>
using namespace std;
void zapis(HINTERNET hConnect1,WIN32_FIND_DATA struktura)
{
TCHAR filenames[270]=TEXT("C:\\123\\");
for(int i=0;i<256;i++)
{
filenames[i+7]=struktura.cFileName[i];
}
if(FtpGetFile(hConnect1,struktura.cFileName,filenames,0,0,0,0))
{
cout<<"File Downloaded"<<std::endl;
}
else
{
cout<<"File Error"<<std::endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
bool ok = false;
HINTERNET hInternet=::InternetOpen(TEXT("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)"),
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL,
0);
if (hInternet != NULL)
{
// открываем FTP сессию
DWORD_PTR asd=0;
HINTERNET hConnect =
::InternetConnect(
hInternet,
TEXT("192.168.131.134"),
INTERNET_DEFAULT_FTP_PORT,
NULL,NULL,
INTERNET_SERVICE_FTP,
0,
(DWORD)0);
if (hConnect != NULL)
{
cout<<"yes"<<std::endl;
WIN32_FIND_DATA sss;
WIN32_FIND_DATA aaa;
LPTSTR buffer111=TEXT("/ftproot");
if(FtpSetCurrentDirectory(hConnect,buffer111))
{
HINTERNET FileFTP;
FileFTP=FtpFindFirstFile(hConnect,TEXT("*.bin"),&sss,INTERNET_FLAG_NEED_FILE,0);
if(FileFTP!=NULL)
{
cout<<"New files are on server"<<std::endl;
//char* qsc="C:\\123\\";
//TCHAR csq[10];
//::WideCharToMultiByte(1251, MB_PRECOMPOSED, qsc, -1, csq, 10);
//TCHAR namefiled[270];
//*namefiled=*csq + *sss.cFileName;
BOOL Uslovie=TRUE;
while(Uslovie)
{
zapis(hConnect,sss);
if(InternetFindNextFile(FileFTP,&sss)==TRUE) Uslovie=TRUE;
else Uslovie=FALSE;
}
cout<<"File END"<<std::endl;
}
else
{
cout<<"NO"<<std::endl;
DWORD WINAPI asdf=GetLastError();
cout<<asdf;
}
}
else cout<<"no";
}
else
{
cout<<"no";
}
// закрываем сессию
::InternetCloseHandle(hConnect);
}
// закрываем WinInet
::InternetCloseHandle(hInternet);
return 0;
} Дело в том, что в начале программа работает в целом нормально. Т.е. при скачивании первых 10 или 13 файлов с сервера. Файлы скачиваются в нужную мне папку с нужным именем. Но затем, при скачивании 11 или 14 файла программа может или зависнуть или отправить всю систему в перезагрузку. При установки точки останова на строке if(FtpGetFile(hConnect1,struktura.cFileName,filenames,0,0,0,0)) Оказалось, что все параметры передаваемые в функцию, верные (т.е. именно те значения, которые и должны быть). (Мне кажется, что некорректное поведение программы вызвано именно этой строкой, т.к. это последняя фукция, которая вызывается перед зависанием или перезагрузкой). Более того, по записям логов сервера оказалось, что при запросе последнего файла (того, на котором происходит сбой) корректно происходит запрос размера этого файла и начинается его скачка, но успешно она не заканчивается, т.к. система или перезагружается, или сервер разрывает соединение по завершению тайм-аута. В случае, когда происходит перезагрузка данный файл вообще не записывается на диск. А если программа "виснет", то файл на диск все же записывается, но не весь, а только первые 4 Кb. При этом открыть файл при запущенной программе невозможно, т.к. он уже открыт в монопольном режиме моей программой, т.е. похоже, что она пытается записать в него информацию. Я не могу понять в чем причина некорректной работы прграммы. Если кто-нибудь может подсказать чем вызваны такие ошибки, прошу помочь.
|
|
|
RE: Некорректная работа FtpGetFile() - 2009-04-30 13:51:27.116666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Юзай теги code и /code для оформления кода. Читать невозможно. Первое, что приходит на ум - у тебя вирусы :)
|
|
|
RE: Некорректная работа FtpGetFile() - 2009-05-03 15:41:39.560000
|
|
|
opiume123
Сообщений: 3
Оценки: 0
Присоединился: 2009-04-30 12:52:16.470000
|
С проблемой разобрался. Оказалось, что ошибки в работе возникают только в том случае, если сервер локальный. Кстати, никто не знает почему так?
|
|
|
|
|