シチュエーション別同一目的 -- Part2

  目次



FTP で ファイルをダウンロードします





  C++ API+ランタイムライブラリ



↓VC6 用に必要な PATH 環境変数
C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin
  
Set CL6="C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl.exe"
Set LINK6="C:\Program Files\Microsoft Visual Studio\VC98\Bin\link.exe"
Set INC6="C:\Program Files\Microsoft Visual Studio\VC98\Include"
Set LIB6="C:\Program Files\Microsoft Visual Studio\VC98\Lib"
%CL6% lang_01.cpp /c /I%INC6%
%LINK6% /LIBPATH:%LIB6% lang_01.obj
  
↑ビルド1

↓VC7(.NET 2003) 用に必要な PATH 環境変数
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
  
Set CL7="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe"
Set LINK7="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\link.exe"
Set INC7="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include"
Set LIB7="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib"
%CL7% lang_01.cpp /c /I%INC7%
%LINK7% /LIBPATH:%LIB7% lang_01.obj
  
↑ビルド2

  
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#pragma comment( lib, "wininet.lib " )

HINTERNET hSession;
HINTERNET hConnect;

DWORD nByte = 0;
int nCnt = 0;

void CALLBACK StatusFunc(
	HINTERNET hInternet,
	DWORD Context,
	DWORD Status,
	LPVOID StatusInfo,
	DWORD StatusInfoSize)
{
	if ( Status == INTERNET_STATUS_RESPONSE_RECEIVED ) {
		nByte += *((DWORD *)StatusInfo);
		nCnt++;
		if ( nCnt % 20 == 0  ) {
			printf("* " );
		}
	}
}

int main(int argc, char* argv[])
{

	hSession = InternetOpen(
		"lightbox",
		INTERNET_OPEN_TYPE_DIRECT,
		NULL, NULL, 0
	);
	if ( hSession == NULL ) {
		printf("InternetOpen error\n");
		return 0;
	}

	InternetSetStatusCallback( hSession, StatusFunc );

	DWORD nPassive;

	nPassive = INTERNET_FLAG_PASSIVE;

	hConnect = InternetConnect(
		hSession,
		"bekins.borland.com",
		INTERNET_INVALID_PORT_NUMBER,
		"anonymous",
		"user@domian",
		INTERNET_SERVICE_FTP,
		nPassive,
		NULL
	);
	if ( hConnect == NULL ) {
		InternetCloseHandle( hSession );
		printf("InternetConnect error\n");
		return 0;
	}

	BOOL bRet;

	bRet = FtpGetFile(
		hConnect,
		"/groups/jp/cppbuild/freecommandlinetools2.exe",
		"freecommandlinetools2.exe",
		false,
		FILE_ATTRIBUTE_NORMAL,
		FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD,
		1
	);

	if ( bRet ) {
		printf("\nダウンロードが完了しました\n");
	}
	else {
		printf("\nダウンロードが失敗しました\n");
	}

	InternetCloseHandle( hConnect );
	InternetCloseHandle( hSession );
	return 0;
}
  



  VBScript 版

↓BatchHelper オブジェクト を利用
http://winofsql.jp/help/cpp/batchhelper/frame.htm

  
Set Ftp = CreateObject( "Lbox.Ftp" )

Server = "bekins.borland.com"
User = "anonymous"
Password = "user@domain"

Remote = "/groups/jp/cppbuild/"
FileName = "freecommandlinetools2.exe"

if Ftp.Connect( Server, User, Password, True ) then
	Call Ftp.Download(Remote & "/" & FileName, FileName)
	Call Ftp.DisConnect()
end if
  



  VB Framework 版

  
vbc.exe lang_03.bas
  
↑ビルド

  
Imports System.IO
Imports System.Net

Module MyModule

' ********************************************************
' * 実行
' ********************************************************
Sub Main()

	Dim strTarget As String = "ftp://bekins.borland.com"
	strTarget &= "/groups/jp/cppbuild/"
	Dim strFile As String = "freecommandlinetools2.exe"
	strTarget &= strFile

	' FTP 用インスタンス作成
	Dim request As FtpWebRequest = WebRequest.Create(strTarget)
	' Passive モード
	request.UsePassive = True
	' バイナリ処理
	request.UseBinary = True
	' ダウンロードコマンドをセット
	request.Method = WebRequestMethods.Ftp.DownloadFile

	' 接続用オブジェクトを FTP 用インスタンスにセット
	request.Credentials = new NetworkCredential ("anonymous","user@domain")

	' コマンド実行
	Dim response As FtpWebResponse = request.GetResponse()

	' レスポンスより、ストリームを取得
	Dim responseStream As Stream = response.GetResponseStream()
	'  バイナリストリームリーダーのインスタンス作成
	Dim reader As BinaryReader = new BinaryReader(responseStream)

	' ファイルストリーム作成
	Dim fs As FileStream = new FileStream( strFile, FileMode.Create )
	' ライタ作成
	Dim w As BinaryWriter = new BinaryWriter(fs)

	Dim loopFlg As Boolean = True
	Dim data As byte = 0
	Dim nCount As Integer = 0
	Do while( loopFlg )
		Try
			data = reader.ReadByte()
			w.Write( data )
			nCount += 1
			if nCount Mod 100000 = 0 then
				Console.Write( "*" )
			end if
		Catch e As EndOfStreamException
			loopFlg = False
		End Try
	Loop

	' ファイルクローズ
	w.Close()
	fs.Close()

	' リーダーを閉じる
	reader.Close()

	' 要求を閉じる
	response.Close()

End Sub

End Module
  



  C# 版

  
csc.exe lang_04.cs
  
↑ビルド

  
using System;
using System.IO;
using System.Net;

// ********************************************************
// * 実行
// ********************************************************
public class App
{

	public static void Main() {

		String strTarget = "ftp://bekins.borland.com";
		strTarget += "/groups/jp/cppbuild/";
		String strFile = "freecommandlinetools2.exe";
		strTarget += strFile;

		// FTP 用インスタンス作成
		FtpWebRequest request = 
			(FtpWebRequest)WebRequest.Create(strTarget);
		// Passive モード
		request.UsePassive = true;
		// バイナリ処理
		request.UseBinary = true;
		// ダウンロードコマンドをセット
		request.Method = WebRequestMethods.Ftp.DownloadFile;;

		// 接続用オブジェクトを FTP 用インスタンスにセット
		request.Credentials = new NetworkCredential ("anonymous","user@domain");

		// コマンド実行
		FtpWebResponse response = (FtpWebResponse)request.GetResponse();

		// レスポンスより、ストリームを取得
		Stream responseStream = response.GetResponseStream();
		// バイナリストリームリーダーのインスタンス作成
		BinaryReader reader = new BinaryReader(responseStream);

		// ファイルストリーム作成
		FileStream fs = new FileStream( strFile, FileMode.Create );
		// ライタ作成
		BinaryWriter w = new BinaryWriter(fs);

		Boolean loop = true;
		byte data = 0;
		int nCount = 0;
		while( loop ) {
			try {
				data = reader.ReadByte();
				w.Write( data );
				nCount++;
				if ( nCount % 100000 == 0 ) {
					Console.Write( "*" );
				}
			}
			catch(EndOfStreamException e) {
				loop = false;
			}
		}

		// ファイルクローズ
		w.Close();
		fs.Close();

		// リーダーを閉じる
		reader.Close();

		// 要求を閉じる
		response.Close();
	}
}
  



  Java

commons-net-3.0.1 を利用

  
javac.exe -classpath .\commons-net-3.0.1.jar Main.java
  
↑ビルド

  
java -cp .;.\commons-net-3.0.1.jar Main
  
↑実行

  
import java.util.*;
import java.io.*;
import org.apache.commons.net.ftp.*;

public class Main {

	// *****************************************************
	// エントリポイント
	// *****************************************************
	public static void main(String[] args) {
		Main thisClass = new Main();
	}

	// *****************************************************
	// コンストラクタ
	// *****************************************************
	public Main() {
		super();
		my_acton();
	}

	// *****************************************************
	// 初期処理
	// *****************************************************
	private void my_acton() {

		MyTool out = new MyTool(">>>");
		out.println("処理開始");

		try {

			FTPSClient ftp;
			ftp = new FTPSClient();
			ftp.connect("サーバー");
			ftp.login("ユーザ", "パスワード");
			ftp.enterLocalPassiveMode();

			// for-each ( 一覧 )
			for (FTPFile f : ftp.listFiles("/home/winofsql/www")) {
					//System.out.println(f.getRawListing());
					System.out.println(f.toFormattedString());
			}

			// LFダウンロード(バイナリ)
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			OutputStream output1;
			output1 = new FileOutputStream("c:\\info1.php");
			ftp.retrieveFile("/home/winofsql/www/info.php", output1);
			output1.close();

			// CRLFダウンロード
			ftp.setFileType(FTP.ASCII_FILE_TYPE);
			OutputStream output2;
			output2 = new FileOutputStream("c:\\info2.php");
			ftp.retrieveFile("/home/winofsql/www/info.php", output2);
			output2.close();

			// テキストアップロード
			InputStream input;
			input = new FileInputStream("c:\\test.vbs");
			ftp.storeFile("/home/winofsql/www/test.txt", input);
			input.close();

			//ftp.noop();
			ftp.logout();
			ftp.disconnect();

		}
		catch (Exception e) {
			out.println("エラー");
		}

		out.println("処理終了");

	}

	// *****************************************************
	// 内部用クラス
	// *****************************************************
	private class MyTool {

		private String mark = null;

		MyTool(String pm) {
			mark = pm;
		}

		public void println(String str) {
			System.out.println( this.mark + str );
		}

	}
}
  



  Jscript COM 版

↓BatchHelper オブジェクト を利用
http://winofsql.jp/help/cpp/batchhelper/frame.htm

  
cscript.exe lang_07.js
  
↑実行

  
// オブジェクト作成
var Ftp = new ActiveXObject("Lbox.Ftp");

// 変数
var Server = "bekins.borland.com";
var User = "anonymous";
var Password = "user@domain";
var Remote = "/groups/jp/cppbuild/"
var FileName = "freecommandlinetools2.exe";

if ( Ftp.Connect( Server, User, Password, true ) )  {
	Ftp.Download(Remote + "/" + FileName, FileName);
	Ftp.DisConnect();
}
  



  Jscript Framework 版

  
jsc.exe lang_06.js
  
↑ビルド

  
import System;
import System.IO;
import System.Net;

var strTarget : String = "ftp://bekins.borland.com";
strTarget += "/groups/jp/cppbuild/";
var strFile : String = "freecommandlinetools2.exe";
strTarget += strFile;

// FTP 用インスタンス作成
var request : FtpWebRequest = WebRequest.Create(strTarget);
// Passive モード
request.UsePassive = true;
// バイナリ処理
request.UseBinary = true;
// ダウンロードコマンドをセット
request.Method = WebRequestMethods.Ftp.DownloadFile;

// 接続用オブジェクトを FTP 用インスタンスにセット
request.Credentials = new NetworkCredential ("anonymous","user@domain");

// コマンド実行
var response : FtpWebResponse = request.GetResponse();

// レスポンスより、ストリームを取得
var responseStream : Stream = response.GetResponseStream();
// バイナリストリームリーダーのインスタンス作成
var reader : BinaryReader = new BinaryReader(responseStream);

// ファイルストリーム作成
var fs : FileStream = new FileStream( strFile, FileMode.Create );
// ライタ作成
var w : BinaryWriter = new BinaryWriter(fs);

var loop : Boolean = true;
var data : byte = 0;
var nCount = 0;
while( loop ) {
	try {
		data = reader.ReadByte();
		w.Write( data );
		nCount++;
		if ( nCount % 100000 == 0 ) {
			Console.Write( "*" );
		}
	}
	catch( e ) {
		loop = false;
	}
}

// ファイルクローズ
w.Close();
fs.Close();

// リーダーを閉じる
reader.Close();

// 要求を閉じる
response.Close();
  



  php5 版

  
php.exe lang_08.php
  
↑実行

  
<?
$base_dir = "/groups/jp/cppbuild/";
$file_name = "freecommandlinetools2.exe";

$conn=ftp_connect("bekins.borland.com");
if (!$conn) {
	die('接続できません' . "\n");
}

$result=@ftp_login($conn, "anonymous", "user@domain"); 
if (!$result) {
	die('ログインできません' . "\n");
}

ftp_pasv($conn, true);

ftp_get($conn, $file_name, "$base_dir/$file_name", FTP_BINARY );


ftp_close($conn);

print "処理が終了しました\n";
?>
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ