Kod: Markera allt
ifstream inFil;
inFil.open ("http://www.crazycasemod.se/temperature.txt");Mvh
Kod: Markera allt
ifstream inFil;
inFil.open ("http://www.crazycasemod.se/temperature.txt");Kod: Markera allt
#pragma once
class CBFInternetFile
{
public:
	CBFInternetFile(void);
	~CBFInternetFile(void);
	bool ReadFile(char* lpFile);
protected:
	BYTE* lpHtmlPage;
	DWORD dwHtmlPageLen;
};
Kod: Markera allt
//
// Funktion:	bfinternetfile.cpp
// Förklaring:	hämtar en fil från internet.
//
#include "StdAfx.h"
#include "bfinternetfile.h"
CBFInternetFile::CBFInternetFile(void)
: lpHtmlPage(NULL)
, dwHtmlPageLen(0)
{
}
CBFInternetFile::~CBFInternetFile(void)
{
	delete lpHtmlPage;
}
//
// Funktion:	ReadFile
// Förklaring:	Läs in en fil från internet.
// Rev:			1.0
//
// Historia:	02-07-09	Rev 1.0	Grund kod
//
bool CBFInternetFile::ReadFile(char* lpFile)
{
	// Initiera variabler
	HINTERNET hInternet;
	HINTERNET hConnect;
	DWORD dwReadByte = 0;
	DWORD dwByteRead = 0;
	BYTE* lpTmp0 = 0;
	BYTE* lpTmp1 = 0;
	BOOL bRet;
	// Kontrollera så vi har en giltlig adress i lpFile
	// Anslut till internet sida FEL RUTINER SKALL LÄGGAS IN!
	// Öppna en anslutning
	hInternet = ::InternetOpen("BFTeknik", INTERNET_OPEN_TYPE_DIRECT,
								0, 0, 0);
	// Öppna en adress (sida)
	hConnect = ::InternetOpenUrl(hInternet, lpFile, NULL, 0,
									 0, 0); // Fel rutin
	
	// Fråga efter tillgänglig data mängd
	::InternetQueryDataAvailable(hConnect, &dwReadByte,0,0);
	// Nollställ Html Page minne
	dwHtmlPageLen = 0;	// Inga byten i lpHttpPage
	if(lpHtmlPage != 0)
		delete lpHtmlPage;
	// Läs in tills 0 byte åter står
	if(dwReadByte > 0)
	{
		do
		{
			// Reservera temp minne för inläsning
			lpTmp0 = new BYTE[dwReadByte];
			
			// Läs tillgänglig data
			bRet = ::InternetReadFile( hConnect, lpTmp0, dwReadByte, &dwByteRead);	
			if(!bRet)
			{
				dwHtmlPageLen = 0; // Något är fel
				break;
			}
									
			// Göm undan inläst i html page
			if(dwHtmlPageLen > 0)
			{
				// Reservera temp minne
				lpTmp1 = new BYTE[dwHtmlPageLen];
				// Kopiera över 
				for(DWORD i = 0; i < dwHtmlPageLen; i++)
				{
					lpTmp1[i] = lpHtmlPage[i];
				}
				delete lpHtmlPage; // Lämna tillbaks minnet
			}
            			
			// reservera minne för html page som rymmer både tmp1 och tmp0
			
			lpHtmlPage = new BYTE[dwHtmlPageLen + dwByteRead];
			
			DWORD i;
			// Adda nya storleken för htmlpage
			// Add tmp1 först
			for(i = 0; i < dwHtmlPageLen; i++)
			{
				lpHtmlPage[i] = lpTmp1[i];
			}
			// Add tmp0 sist
			DWORD ii = 0;
			for(i = dwHtmlPageLen; i < dwHtmlPageLen + dwByteRead; i++)
			{
				lpHtmlPage[i] = lpTmp0[ii];
				ii++;
			}
            
			// Justera reserverat minne för lpHtmlPage
			dwHtmlPageLen += dwByteRead;
			// Lämna tillbaks temp minne              
			delete lpTmp0;
			delete lpTmp1;
			// Kontollera om mer data finns att läsa
			::InternetQueryDataAvailable(hConnect, &dwReadByte,0,0);
				
		}
		while (dwReadByte >0 );
	}
	// Stäng internet uppkopplingen
	::InternetCloseHandle(hConnect);
	::InternetCloseHandle(hInternet);
	return true;
}
Kod: Markera allt
#include <urlmon.h> //Must add the urlmon.h to project or URLDownloadToFile will not work.
#pragma comment(lib, "urlmon.lib") //Must add the lib file to project or URLDownloadToFile will not work.
int main()
{
HRESULT hr = URLDownloadToFile ( NULL, "http://www.crazycasemod.se/temperature.txt", "C:\\temperature.txt", 0, NULL );
return 0;
}Om du lever på den abstraktionsnivån drar du fördel av att använda något annat språk än C++, t.ex Ruby:squiz3r skrev:Hej, jag tänkte försöka få ett C++ program att läsa från en .txt fil som ligger på ett webhotel. Adressen till den är http://www.crazycasemod.se/temperature.txt så då testade jag att skriva:...Kod: Markera allt
ifstream inFil; inFil.open ("http://www.crazycasemod.se/temperature.txt");
Kod: Markera allt
  require 'net/ftp'
  ftp = Net::FTP.new('www.crazycasemod.se')
  ftp.login
  ftp.gettextfile('temperature.txt')
  ftp.close
Kod: Markera allt
 require 'net/http'
 Net::HTTP.get_print 'www.crazycasemod.se', '/temperature.txt'