|
WILLはネットワークに関するあらゆるソリューションをご提供します。
|
|
株式会社ウィル |
|
'FTP EDITOR Ver.1.02(C)COPYRIGHT 1999 WILL
Option Explicit
Private m_Action% 'フラグ:処理の進行の状態を示す
Private m_PutData$ 'システム既定の文字コードに変換された送信データ
Private m_Dirty As Boolean 'フラグ:「編集用テキストボックス」の内容変更の有無を示す
'本文の漢字コードを取得する
Private Function GetFileCode$()
Dim i%
For i = 0 To 2
If Option1(i).Value = True Then
GetFileCode = Option1(i).Caption
Exit For
End If
Next
End Function
'ファイル名の漢字コードを取得する
Private Function GetSysCode$()
Dim i%
For i = 0 To 1
If Option2(i).Value = True Then
GetSysCode = Option2(i).Caption
Exit For
End If
Next
End Function
'リストからファイルの種類を判別する
'戻り値は、先頭にファイルの種類を示す1文字に続き名前がくる
'不明の場合は、空文字
Private Function WhatKindOfFile$(List$)
Dim n%, x$(), f$, p%
'UNIXがFTPサーバーである場合、ls -algの出力結果がリストされている
'これは、スペースで9分割されていて、9番目がファイル名である
'DOS形式の場合は4分割されるディレクトリの場合<DIR>という文字がある
n = Split(List, " ", x(), 9) 'x(1)...x(n)に分割
If (n < 1) Then
Exit Function
End If
f = ""
If n = 4 Then 'MS-DOS
If (Trim(x(3)) = "<DIR>") Then 'MS-DOS/ディレクトリ
f = "D" & x(n)
Else
f = "F" & x(n)
End If
Else 'UNIX
Select Case LCase(Left$(x(1), 1))
Case "-" '普通のファイル
f = "F" & x(n)
Case "d" 'ディレクトリ
f = "D" & x(n)
Case Else '不明
f = ""
End Select
End If
WhatKindOfFile = f
End Function
'文字列を分割して配列に格納する
Private Function Split%(ByVal s$, ByVal d$, a$(), Optional mx% = 0)
Dim i%, p%, n%
If (mx < 0) Then
mx = 0
End If
n = Len(d)
s = LTrim(s)
p = InStr(s, d)
i = 0
Do While (Len(s) > 0 And p > 0 And (mx = 0 Or mx > i + 1))
i = i + 1
ReDim Preserve a(i)
a(i) = Mid$(s, 1, p - 1)
s = LTrim(Mid$(s, p + n))
p = InStr(s, d)
Loop
If (Len(s) > 0) Then
i = i + 1
ReDim Preserve a(i)
a(i) = s
End If
Split = i
End Function
'FTP接続を始める
Private Sub StartFtp(Action%)
m_Action = Action
On Error GoTo err1
'FTPサーバーに接続する接続済である場合エラー
ftp1.Connect Text1, Text2, Text3
'GETボタンを無効にする
Command1.Enabled = False
'PUTボタンを無効にする
Command2.Enabled = False
'中断ボタンを有効にする
Command3.Enabled = True
'検索ボタンを無効にする
Command5.Enabled = False
Exit Sub
err1:
MsgBox Err.Description, vbExclamation, Err.Number
End Sub
'GETボタン
Private Sub Command1_Click()
Dim r%
'Text5の内容が変更されていた場合
If m_Dirty = True Then
'メッセージボックスを表示
r = MsgBox("変更されている内容が失われますがよいですか?", vbYesNo, "Confirm")
If r <> vbYes Then
Exit Sub
End If
End If
'Text5の内容が変更され,確認画面ではいと答えた場合
StartFtp 11
End Sub
'PUTボタン
Private Sub Command2_Click()
StartFtp 21
End Sub
'中断ボタン
Private Sub Command3_Click()
ftp1.Abort
End Sub
'終了ボタン
Private Sub Command4_Click()
Unload Me
End Sub
'検索ボタン
Private Sub Command5_Click()
On Error GoTo err1
'FTPサーバーに接続
ftp2.Connect Text1, Text2, Text3
'検索ボタンを無効にする
Command5.Enabled = False
'リストボックスを無効にする
List1.Enabled = False
Exit Sub
err1:
MsgBox Err.Description, vbExclamation, Err.Number
End Sub
'選択ボタン
Private Sub Command6_Click()
Dim f$ '@WhatKindOfFile()で取得したファイルの種類+(ディレクトリ名+)ファイル名または
'Aファイルの種類を外した(ディレクトリ名+)ファイル名を示す
Dim k$ 'ファイルの種類を示す
Dim d$ 'ディレクトリ名またはファイル名またはディレクトリ名+ファイル名を示す
f = ""
If List1.ListIndex <> -1 Then 'リストボックスから項目が選択された場合
'ファイルの種類とファイル名を取得する
f = WhatKindOfFile(List1.List(List1.ListIndex))
End If
If f = "" Then 'ファイルの種類が不明か何も選択されていない場合
MsgBox "ファイルまたはディレクトリを選択してください", _
vbExclamation, "SELECT FILE OR DIRECTORY"
Exit Sub
End If
'fをファイルの種類とファイル名に分ける
k = Left$(f, 1)
f = Mid$(f, 2)
'Text6の表示内容を確認し中身があればText6+/という状態にする
If Len(Text6) = 0 Then 'Text6に何も表示されていない場合はdに何も入れない
d = ""
ElseIf Right$(Text6, 1) <> "/" Then 'Text6の右端が/でない場合はファイル名の右端に/を加える
d = Text6 & "/"
Else 'その他(右端に/がある)の場合表示されたままをdに入れる
d = Text6
End If
'fが絶対パスのケースに対応する
If Left$(f, 1) = "/" Then 'fが絶対パスであった場合はそのままdにfを入れる
d = f
Else
d = d & f 'その他の場合はText6で指定されたディレクトリにfを加える
End If
'dがディレクトリならばText6にディレクトリ名を入れる
If k = "D" Then
Text6 = d
Command5_Click
'dがファイルであったならばText4にファイル名を入れる
ElseIf k = "F" Then
Text4 = d
Command8_Click
Command1_Click
End If
End Sub
'切替ボタン
Private Sub Command8_Click()
If Frame4.Visible = True Then '編集フレームが有効な場合
Frame3.Visible = True '一覧フレームを有効にする
Frame4.Visible = False '編集フレームを無効にする
Command8.Caption = "編集画面" '切替ボタンの表示を「編集画面」にする
Else
Frame3.Visible = False '一覧フレームを無効にする
Frame4.Visible = True '編集フレームを有効にする
Command8.Caption = "検索画面" '切替ボタンの表示を「検索画面」にする
End If
End Sub
'フォームが呼び出された
Private Sub Form_Load()
m_Dirty = False
Command3.Enabled = False '中断ボタンを無効にする
Frame3.Visible = False '一覧フレームを有効にする
Command8.Caption = "検索画面" '切替ボタンの表示を「検索画面」にする
End Sub
'フォームのサイズが変更された
Private Sub Form_Resize()
On Error Resume Next
'編集フレームの位置を指定
Frame4.Left = 0
Frame4.Height = Me.ScaleHeight - Frame4.Top
Frame4.Width = Me.ScaleWidth
'FTPOCXバージョン情報の表示位置を指定
ftp1.Left = 0
ftp1.Width = Frame4.Width
ftp1.Top = Frame4.Height - ftp1.Height
'Text5の表示位置を指定
Text5.Top = 0
Text5.Left = 0
Text5.Width = Frame4.Width
Text5.Height = Frame4.Height - ftp1.Height - Command1.Height * 2
'GETボタンの位置を指定
Command1.Top = Text5.Height + Command1.Height \ 2
Command2.Top = Command1.Top
Command3.Top = Command1.Top
'一覧フレームの位置を指定
Frame3.Top = Frame4.Top
Frame3.Left = Frame4.Left
Frame3.Height = Frame4.Height
Frame3.Width = Frame4.Width
'FTPOCXバージョン情報の表示位置を指定
ftp2.Left = ftp1.Left
ftp2.Top = ftp1.Top
ftp2.Width = ftp1.Width
ftp2.Height = ftp1.Height
'検索ボタンの位置を指定
Command5.Top = Command1.Top
Command6.Top = Command1.Top
Text6.Top = Command1.Top
Text6.Width = (Frame3.Width - Text6.Left) * 0.9
Label5.Top = Command1.Top
'リストボックスの位置を指定
List1.Left = 0
List1.Top = 0
List1.Width = Frame3.Width
List1.Height = Frame3.Height - ftp2.Height - Command6.Height * 2
On Error GoTo 0
End Sub
'送信が終了した
Private Sub ftp1_CommandDone(Code As Integer, Stat As String, Msg As String)
If Code = 0 Then '正常に送信が終了
Select Case m_Action
Case 11 'GET
m_Action = 12
ftp1.Filetype = "A" 'ファイル転送モードをアスキーモードにする
ftp1.FileCode = GetFileCode() 'ファイル本文の漢字コードを指定する
ftp1.SysCode = GetSysCode() 'ファイル名の漢字コードを指定する
ftp1.GetFile Text4 '指定されたファイルを取り出す
Case 12
ftp1.DisConnect 'セッションを切断
m_Dirty = False
Case 21 ' PUT
m_Action = 22
m_PutData = StrConv(Text5, vbFromUnicode) 'Text5の文字列をUnicode からシステム既定の文字コードに変換
ftp1.Filetype = "A" 'ファイル転送モードをアスキーモードにする
ftp1.FileCode = GetFileCode() 'ファイル本文の漢字コードを指定する
ftp1.SysCode = GetSysCode() 'ファイル名の漢字コードを指定する
ftp1.PutFile Text4 'Text4にあるファイルをリモートファイルに格納する
Case 22
ftp1.DisConnect 'セッションを切断
m_Dirty = False
End Select
Else
MsgBox Msg, vbExclamation, Stat & "(" & Code & ")"
ftp1.DisConnect
End If
End Sub
'セッションが切断された
Private Sub ftp1_DisConnected(Code As Long, Msg As String)
Command1.Enabled = True 'GETボタンを有効にする
Command2.Enabled = True 'PUTボタンを有効にする
Command3.Enabled = False '中断ボタンを無効にする
Command5.Enabled = True '検索ボタンを有効にする
End Sub
'データを受信した
Private Sub ftp1_GetData(data As String)
Text5 = Text5 & StrConv(data, vbUnicode)
End Sub
'ファイル転送が始まった
Private Sub ftp1_GetOpen(SaveFileName As String)
'データを表示する領域を空にする
Text5 = ""
End Sub
'サーバーが受信状態になった
Private Sub ftp1_PutData(data As String)
data = m_PutData 'システム既定の文字コードに変換されたText5内の文字列をデータとして送信する
m_PutData = "" '送信セッションの切断のため送信データが空になるための準備をする
End Sub
'送信が終了した
Private Sub ftp2_CommandDone(Code As Integer, Stat As String, Msg As String)
If Code = 0 Then '正常に送信が終了
Select Case Stat
Case "Connect"'ConnectメソッドによりCommanndDoneイベントが発生した場合
ftp2.SysCode = GetSysCode() 'サーバ上でのファイル名およびエラーメッセージで使用される
'漢字コードをGetSysCode()で指定されたものににする
ftp2.Dir Text6 'DirメソッドによりText6で指定したディレクトリのリストを取得する
Case "Dir" 'DirメソッドによりCommandDoneイベントが発生した場合
ftp2.DisConnect 'セッションを切断する
End Select
Else '送信が正常に終了しなかった場合
MsgBox Msg, vbExclamation, Stat & "(" & Code & ")"
ftp2.DisConnect 'セッションを切断する
End If
End Sub
'ディレクトリリストを1行受け取った
Private Sub ftp2_DirData(data As String)
List1.AddItem data
End Sub
'ディレクトリリストの送信準備ができた
Private Sub ftp2_DirOpen()
List1.Clear
End Sub
'FTPセッションが切断された
Private Sub ftp2_DisConnected(Code As Long, Msg As String)
Command5.Enabled = True '検索ボタンを有効にする
List1.Enabled = True 'リストボックスを有効にする
End Sub
'リストボックスをクリックした
Private Sub List1_Click()
Dim f$ '@WhatKindOfFile()で取得したファイルの種類+(ディレクトリ名+)ファイル名または
'Aファイルの種類を外した(ディレクトリ名+)ファイル名を示す
Dim k$ 'ファイルの種類を示す
Dim d$ 'ディレクトリ名またはファイル名またはディレクトリ名+ファイル名を示す
f = ""
If List1.ListIndex <> -1 Then 'リストボックスから項目が選択された場合
'リストからファイルの種類を判別
f = WhatKindOfFile(List1.List(List1.ListIndex))
End If
If f = "" Then 'ファイルの種類が不明か何も選択されていない場合
Exit Sub
End If
'fをファイルの種類とファイル名に分ける
k = Left$(f, 1)
f = Mid$(f, 2)
'Text6の表示内容を確認し中身があればText6+/という状態にする
If Len(Text6) = 0 Then 'Text6に何も表示されていない場合はdに何も入れない
d = ""
ElseIf Right$(Text6, 1) <> "/" Then 'その他(右端に/がある)の場合表示されたままをdに入れる
d = Text6 & "/"
Else 'その他(右端に/がある)の場合表示されたままをdに入れる
d = Text6
End If
'fが絶対パスのケースに対応する
If Left$(f, 1) = "/" Then 'fが絶対パスであった場合はそのままdにfを入れる
d = f
Else
d = d & f 'その他の場合はText6で指定されたディレクトリにfを加える
End If
'dがファイルであったならばText4にファイル名を入れる
If k = "F" Then
Text4 = d
End If
End Sub
Private Sub List1_DblClick()
Command6_Click
End Sub
Private Sub Text5_Change()
m_Dirty = True
End Sub
|
(C) Copyright 2003 WILL Corporation. All rights reserved. |