新しく発言する EXIT インデックスへ
RE[2]:「WEB上のファイル読出」唐瀬人さんへ...

  RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 山中和義 2006/12/15 17:55:51 
  !FTPプロトコルを使う 山中和義 2006/12/15 17:59:20 
  │├つづき 山中和義 2006/12/15 18:00:07 
  │└さらにつづき 山中和義 2006/12/15 18:00:52 
  │ └野次馬も、やってみました。 SECOND 2006/12/16 02:54:02 
  │  └「FTPサーバの名称」が正しいです。 山中和義 2006/12/16 11:05:27 
  更新。通常のFTPクライアントと同じに直接読... 山中和義 2006/12/16 23:44:57 
  │├.txt直接は、文字化けが出ます。(IE6atwin9... SECOND 2006/12/17 17:00:18 
  │└こんな画面になっています。せっかくのもの... SECOND 2006/12/18 17:05:45 
  │ └ソース公開アドレスを変更しました。 山中和義 2006/12/19 15:17:49 
  いろいろな方法があるものですね。残念なが... 唐瀬人 2006/12/19 21:20:11 

  RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 山中和義 2006/12/15 17:55:51  ツリーへ

RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 返事を書く
山中和義 2006/12/15 17:55:51
>コマンドプロンプト(DOSプロンプト)及び他のプログラムの組み合わせにより、
>WEB上のテキストファイル内容を反映させ

Win32 APIを使って、FTPクライアントをつくってみました。
これで読み書きができるようになりました。

  !FTPプロトコルを使う 山中和義 2006/12/15 17:59:20  ツリーへ

Re: RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 返事を書く
山中和義 2006/12/15 17:59:20
!FTPプロトコルを使う

!---InternetOpen関数
!dwAccessType(接続方法)
LET INTERNET_OPEN_TYPE_DIRECT=BVAL("1",16) !全てのホスト名をローカルで解決する
LET INTERNET_OPEN_TYPE_PRECONFIG=BVAL("0",16) !既存の設定(要はIEの設定)を利用する
LET INTERNET_OPEN_TYPE_PROXY=BVAL("3",16) !プロキシサーバ経由で接続する

!dwFlags(ネットワーク使用有無)
LET INTERNET_FLAG_ASYNC=BVAL("10000000",16) !サーバーから取得する
LET INTERNET_FLAG_FROM_CACHE=BVAL("1000000",16) !キャッシュから取り出す(ネットワークを使用しない)

!---InternetConnect関数
!nServerPort(接続ポート)
LET INTERNET_DEFAULT_FTP_PORT=21 !FTP
LET INTERNET_DEFAULT_GOPHER_PORT=70 !GOPHER
LET INTERNET_DEFAULT_HTTP_PORT=80 !HTTP
LET INTERNET_DEFAULT_HTTPS_PORT=443 !HTTPS
LET INTERNET_DEFAULT_SOCKS_PORT=1080 !SOCK

!dwService(サービスの種類)
LET INTERNET_SERVICE_FTP=1 !FTP
LET INTERNET_SERVICE_GOPHER=2 !GOPHER
LET INTERNET_SERVICE_HTTP=3 !HTTP

!dwFlags(オプション)
LET INTERNET_FLAG_PASSIVE=BVAL("8000000",16) !PASSIVEモードで接続(FTP時)

!---FtpGetFile関数
!dwFlagsAndAttributes(ダウンロード後のファイルの属性)
LET FILE_ATTRIBUTE_READONLY=BVAL("1",16) !読み込み専用
LET FILE_ATTRIBUTE_HIDDEN=BVAL("2",16) !隠しファイル
LET FILE_ATTRIBUTE_SYSTEM=BVAL("4",16) !システムファイル
LET FILE_ATTRIBUTE_DIRECTORY=BVAL("10",16) !ディレクトリ(フォルダ)
LET FILE_ATTRIBUTE_ARCHIVE=BVAL("20",16) !アーカイブファイル
LET FILE_ATTRIBUTE_NORMAL=BVAL("80",16) !通常のファイル

!dwFlags(転送方法)
LET FTP_TRANSFER_TYPE_ASCII=BVAL("1",16) !アスキーモード
LET FTP_TRANSFER_TYPE_BINARY=BVAL("2",16) !バイナリモード

!dwFlags(ダウンロード方法)
LET INTERNET_FLAG_RELOAD=BVAL("80000000",16) !キャッシュを無視し、サーバから強制的にダウンロードする
LET INTERNET_FLAG_DONT_CACHE=BVAL("4000000",16) !ダウンロードファイルをキャッシュに加えない
LET INTERNET_FLAG_RESYNCHRONIZE=BVAL("800",16) !サーバから再読み込み
LET INTERNET_FLAG_NEED_FILE=BVAL("10",16) !キャッシュできないときに一時ファイルを生成する
LET INTERNET_FLAG_HYPERLINK=BVAL("400",16) !有効期限、最終更新時刻がサーバから返されない場合は強制的に再読み込み
!--------------------------------------

LET True=1
LET False=0

  │├つづき 山中和義 2006/12/15 18:00:07  ツリーへ

Re: !FTPプロトコルを使う 返事を書く
山中和義 2006/12/15 18:00:07
つづき


!インターネットサービスのオープン
LET lngWinINet=InternetOpen("", INTERNET_OPEN_TYPE_PRECONFIG, "", "", INTERNET_FLAG_ASYNC)

IF lngWinINet<>0 THEN !ハンドルが得られたら

!FTPサーバへ接続
LET Server$="FTPサーバーのURL"
LET User$="ユーザー名"
LET Psw$="パスワード"
LET lngFtpHnd=InternetConnect(lngWinINet, Server$, INTERNET_DEFAULT_FTP_PORT, User$, Psw$, INTERNET_SERVICE_FTP, 0, 0)

IF lngFtpHnd<>0 THEN !ハンドルが得られたら

!FTPサーバへファイルのアップロード
LET dLc$="c:\My Documents\無題.txt"
LET dRmt$="/homepage/123.txt"
LET dMd=FTP_TRANSFER_TYPE_ASCII
LET rc=FtpPutFile(lngFtpHnd, dLc$, dRmt$, dMd, 0)
PRINT "FtpPutFile:";rc !boolean 1:true
WAIT DELAY 2

!FTPサーバ上のファイルのリネーム
LET dRmt$="/homepage/123.txt"
LET dRnm$="/homepage/456.txt"
LET rc=FtpRenamefile(lngFtpHnd, dRmt$, dRnm$)
PRINT "FtpRenamefile:";rc
WAIT DELAY 2

!FTPサーバからファイルのダウンロード
LET dRmt$="/homepage/message0.html"
LET dLc$="789.txt"
LET dMd=FTP_TRANSFER_TYPE_ASCII
LET fFailIfExists=Flase !上書き ※True:ダウンロード先に既存のファイルがない場合のみ
LET rc=FtpGetFile(lngFtpHnd, dRmt$, dLc$, fFailIfExists, FILE_ATTRIBUTE_NORMAL, dMd + INTERNET_FLAG_RELOAD, 0)
PRINT "FtpGetFile:";rc
WAIT DELAY 2

!FTPサーバ上のファイルの削除
LET dRmt$="/homepage/789.txt"
LET rc=FtpDeletefile(lngFtpHnd, dRmt$)
PRINT "FtpDeletefile:";rc
WAIT DELAY 2

!FTPサーバから切断
LET rc=InternetCloseHandle(lngFtpHnd)
PRINT "InternetCloseHandle:";rc
ELSE
PRINT "FTPサーバへ接続できません。"
END IF

!インターネットサービスのクローズ
LET rc=InternetCloseHandle(lngWinINet)
PRINT "InternetCloseHandle:";rc

ELSE
PRINT "インターネットサービスに接続できません。"
END IF

END

  │└さらにつづき 山中和義 2006/12/15 18:00:52  ツリーへ

Re: !FTPプロトコルを使う 返事を書く
山中和義 2006/12/15 18:00:52
さらにつづき


!インターネット関連API
EXTERNAL FUNCTION InternetOpen(lpszAgent$, dwAccessType, lpszProxyName$, lpszProxyBypass$, dwFlags) !インターネットサービスを開始する
assign "wininet.dll","InternetOpenA"
END FUNCTION

EXTERNAL FUNCTION InternetCloseHandle(hInternet) !インターネットサービスを終了する ※boolean
assign "wininet.dll","InternetCloseHandle"
END FUNCTION

EXTERNAL FUNCTION InternetConnect(hInternet, lpszServerName$, nServerPort, lpszUsername$, lpszPassword$, dwService, dwFlags, dwContext) !FTP/HTTPサーバへ接続する
assign "wininet.dll","InternetConnectA"
END FUNCTION

!FTP
EXTERNAL FUNCTION FtpDeletefile(hConnect, lpszFileName$) !削除 ※boolean
assign "wininet.dll","FtpDeleteFileA"
END FUNCTION

EXTERNAL FUNCTION FtpGetFile(hConnect, lpszRemoteFile$, lpszNewFile$, fFailIfExists, dwFlagsAndAttributes, dwFlags, dwContext) !ダウンロード ※boolean
assign "wininet.dll","FtpGetFileA"
END FUNCTION

EXTERNAL FUNCTION FtpPutFile(hConnect, lpszLocalFile$, lpszNewRemoteFile$, dwFlags, dwContext) !アップロード ※boolean
assign "wininet.dll","FtpPutFileA"
END FUNCTION

EXTERNAL FUNCTION FtpRenameFile(hConnect, lpszExisting$, lpszNew$) !名称変更 ※boolean
assign "wininet.dll","FtpRenameFileA"
END FUNCTION

  │ └野次馬も、やってみました。 SECOND 2006/12/16 02:54:02  ツリーへ

Re: さらにつづき 返事を書く
SECOND 2006/12/16 02:54:02
野次馬も、やってみました。
NextFTP のように出来る。感激です。
最初、なかなかつながらなくて、困ったんですが、
"FTPサーバーのURL" の所に、"ftp:// …"とやるとダメですね。
"ftp19.nifty.com" のように書くとうまく行きました。

  │  └「FTPサーバの名称」が正しいです。 山中和義 2006/12/16 11:05:27  ツリーへ

Re: 野次馬も、やってみました。 返事を書く
山中和義 2006/12/16 11:05:27
「FTPサーバの名称」が正しいです。

例、ftp.xxx.ne.jpや192.168.0.1の形式を指定してください。

  更新。通常のFTPクライアントと同じに直接読... 山中和義 2006/12/16 23:44:57  ツリーへ

Re: RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 返事を書く
山中和義 2006/12/16 23:44:57
更新。通常のFTPクライアントと同じに直接読み書きができます。

http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/ftp_sample.txt

  │├.txt直接は、文字化けが出ます。(IE6atwin9... SECOND 2006/12/17 17:00:18  ツリーへ

Re: 更新。通常のFTPクライアントと同じに直接読... 返事を書く
SECOND 2006/12/17 17:00:18
.txt 直接は、文字化けが出ます。(IE6 at win98SE)

以下の様な、ひどい.htm でも、きれいに出ます、
ブラウザは、寛容です?

<META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
<!--
<html>
<head>
</head>
<body>
-->

<pre>

 :
〜 一般テキスト.txt 〜
 :
 :

</pre>

<!--
</body>
</html>
-->

  │└こんな画面になっています。せっかくのもの... SECOND 2006/12/18 17:05:45  ツリーへ

Re: 更新。通常のFTPクライアントと同じに直接読... 返事を書く
SECOND 2006/12/18 17:05:45
こんな画面になっています。せっかくのものが・・
私のブラウザーは、IE6 で 「表示」→「エンコード」→「自動選択」になっていますが、
なぜか?西ヨーロッパ言語(Windows)が、自動で選ばれ、下の様になる為
いつも、手動で「エンコード」を、日本語(シフト JIS) にしなければ見れません。
原因は、ブラウザの状態によっては、そのデフォルト言語が、SHIFT−JIS になるとは
限らないためと、思われます。せっかくのページがモッタイナイです。


FTP?N?‰?C?A?“?g?d?A?-?e?@2006.12.18

!’??O
!?@“R?i?a?s?C?E?a?I
!?@?@FtpFindFirstFile?AInternetFindNextFile?AFtpGetCurrentDirectory

DECLARE EXTERNAL FUNCTION GetLastError

!---InternetOpen?O?”
!dwAccessType(?U‘±?u?@)
LET INTERNET_OPEN_TYPE_DIRECT=BVAL("1",16) !‘S?A?I?z?X?g???d???[?J???A‰d???・?e
LET INTERNET_OPEN_TYPE_PRECONFIG=BVAL("0",16) !?u‘¶?I?Y’e?i?v?IIE?I?Y’e?j?d???p?・?e
LET INTERNET_OPEN_TYPE_PROXY=BVAL("3",16) !?v???L?V?T?[?o?o?R?A?U‘±?・?e

!dwFlags(?l?b?g???[?N?g?p?L?3)
LET INTERNET_FLAG_ASYNC=BVAL("10000000",16) !?T?[?o?[?c?c?a“??・?e
LET INTERNET_FLAG_FROM_CACHE=BVAL("1000000",16) !?L???b?V?…?c?c?a?e?o?・(?l?b?g???[?N?d?g?p?μ?E?¢)

  │ └ソース公開アドレスを変更しました。 山中和義 2006/12/19 15:17:49  ツリーへ

Re: こんな画面になっています。せっかくのもの... 返事を書く
山中和義 2006/12/19 15:17:49
ソース公開アドレスを変更しました。

http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/ftp_sample.html

  いろいろな方法があるものですね。残念なが... 唐瀬人 2006/12/19 21:20:11  ツリーへ

Re: RE[2]:「WEB上のファイル読出」 唐瀬人さんへ 返事を書く
唐瀬人 2006/12/19 21:20:11
いろいろな方法があるものですね。残念ながらプログラム初級者の私にはその内容について理解するのはなかなか厳しいですが。

ただ素人の観点で言わせて貰えば、OPEN文を使ってローカルファイルもLAN上のファイルも読み書きできるし、COMポートとも通信して入出力できるなら、標準のインターネット接続を使って

OPEN #1: NAME "http://www.〜"
LINE INPUT #1 :DATA$
CLOSE #1
SELECT CASE DATA$
CASE "0"
EXECUTE "VALVE_OPEN.EXE"
CASE "1"
EXECUTE "VALVE_CLOSE.EXE"
CASE ELSE
END SELECT
END

。。。と簡単にやれないものかとやっぱり思えてしまうわけで。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。