none
請問ftp上傳,如何才能連資料夾也上傳? RRS feed

  • 問題

  • as title!!
    劣者目前弄出的介面

    <img src="http://farm2.static.flickr.com/1325/906731705_1919897564.jpg?v=0" alt="" width="500" height="382" onload="show_notes_initially();" class="reflect">

    上傳檔案,若想連資料夾亦一同上傳的話,Private Sub btnUpload_Click()要怎麼寫呢?煩請高手大大們指教一二!!

     

    以下為code:

     

    Imports System.IO
    Public Class Form1
        ' Internet Session Handle (InternetOpen)
        Dim hInternet As Integer

        ' Internet Service Handle (InternetConnect)
        Dim hConnect As Integer
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            btnConnect.Enabled = True
            btnClose.Enabled = False
        End Sub

        Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
            ' INTERNET_FLAG_NO_CACHE_WRITE = &H04000000
            ' {不將Internet連結之資訊寫入Cache中}

            hInternet = InternetOpen("FTP Application", INTERNET_OPEN_TYPE_DIRECT, Nothing, Nothing, INTERNET_FLAG_NO_CACHE_WRITE)

            ' If Internet Session Handle created OK
            If (hInternet <> 0) Then

                ' FTP Service Handle
                If (txtHOST.Text = "") And (txtPassword.Text = "") Then
                    ' anonymous
                    hConnect = InternetConnect(hInternet, txtHOST.Text, textPort.Text, Nothing, Nothing, INTERNET_SERVICE_FTP, INTERNET_FLAG_EXISTING_CONNECT Or INTERNET_FLAG_PASSIVE, 0)
                Else
                    hConnect = InternetConnect(hInternet, txtHOST.Text, textPort.Text, txtLogin.Text, txtPassword.Text, INTERNET_SERVICE_FTP, INTERNET_FLAG_EXISTING_CONNECT Or INTERNET_FLAG_PASSIVE, 0)
                End If

                ' If internet connection created OK
                If (hConnect <> 0) Then
                    btnConnect.Enabled = False
                    btnClose.Enabled = True

                    StatusBar1.Panels(0).Text = "FTP 連線成功."
                Else
                    btnConnect.Enabled = True
                    btnClose.Enabled = False

                    StatusBar1.Panels(0).Text = "Error: Can not Create Internet Service Session."
                End If
            Else
                btnConnect.Enabled = True
                btnClose.Enabled = False

                StatusBar1.Panels(0).Text = "Error: Can not create Internet Session."
            End If
        End Sub

        Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
            ' close internet service connection
            If (hConnect <> 0) Then
                InternetCloseHandle(hConnect)
                hConnect = 0
                StatusBar1.Panels(0).Text = "Internet Service Closed."
            End If

            ' close internet session
            If (hInternet <> 0) Then
                InternetCloseHandle(hInternet)
                hInternet = 0
                StatusBar1.Panels(0).Text = "Internet Connection Closed."
            End If

            btnConnect.Enabled = True
            btnClose.Enabled = False

            StatusBar1.Panels(0).Text = "FTP 連線中斷."
        End Sub

        Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged
            DirListBox1.Path = DriveListBox1.Drive
        End Sub

        Private Sub DirListBox1_Change(ByVal sender As Object, ByVal e As System.EventArgs) Handles DirListBox1.Change
            FileListBox1.Path = DirListBox1.Path
        End Sub

        Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
            If ListBox1.SelectedItems.Count > 0 Then
                btnDownload.Enabled = True
            Else
                btnDownload.Enabled = False
            End If
        End Sub

        Private Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click
           

         If RadioButton1.Checked Then
              dwInternetFlags = FTP_TRANSFER_TYPE_BINARY
         Else
              dwInternetFlags = FTP_TRANSFER_TYPE_ASCII

       

    End Sub
    End Class

    2007年7月26日 下午 06:16

解答

  • Dear Sir

    我自己是先去嘗試轉移目前ftp Server的工作目錄,如果失敗的話便去建立目錄;您參考看看。

    FtpSetCurrentDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpSetCurrentDirectoryA")> _
    Private Shared Function FtpSetCurrentDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

    FtpCreateDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpCreateDirectory")> _
    Private Shared Function FtpCreateDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

    2007年7月28日 上午 03:07
    版主

所有回覆

  • Dear Sir

    我沒有細看您的程式碼,不過要連資料夾一起複製一般來說也是要做在程式裡面;例如先在Ftp Server上開一個同名的資料夾,之後轉移在Ftp Server上的目前工作目錄,之後複製相關檔案到Ftp Server上,以上,請參考看看。

    2007年7月27日 上午 01:59
    版主
  •  bauann 寫信:

    Dear Sir

    我沒有細看您的程式碼,不過要連資料夾一起複製一般來說也是要做在程式裡面;例如先在Ftp Server上開一個同名的資料夾,之後轉移在Ftp Server上的目前工作目錄,之後複製相關檔案到Ftp Server上,以上,請參考看看。

     

    是先判斷server上是否有該local端資料夾?

    沒有的話就會自動建立一個,然後再將local資料夾裡的檔案傳送至server嗎?

    那這樣是否還要有抓取server上list的功能? (若需要...這部份劣者還沒研究出來要怎麼寫....@@)

     

    概念上大概是懂,但因為對vb是剛接觸...

    不曉得要如何寫...能否請大大指點一下?

    2007年7月27日 上午 09:26
  • Dear Sir

    我自己是先去嘗試轉移目前ftp Server的工作目錄,如果失敗的話便去建立目錄;您參考看看。

    FtpSetCurrentDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpSetCurrentDirectoryA")> _
    Private Shared Function FtpSetCurrentDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

    FtpCreateDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpCreateDirectory")> _
    Private Shared Function FtpCreateDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

    2007年7月28日 上午 03:07
    版主
  •  bauann 寫信:

    Dear Sir

    我自己是先去嘗試轉移目前ftp Server的工作目錄,如果失敗的話便去建立目錄;您參考看看。

    FtpSetCurrentDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpSetCurrentDirectoryA")> _
    Private Shared Function FtpSetCurrentDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

    FtpCreateDirectory

    <DllImport("wininet.dll", EntryPoint:="FtpCreateDirectory")> _
    Private Shared Function FtpCreateDirectory(ByVal hConnect As Integer, _
        ByVal lpszDirectory As String) As Boolean
    End Function

     

     

     

    不好意思...劣者不太懂大大寫的code,能否說明一下?

    抱歉...

    另外,劣者看到有一個My.Computer.FileSystem.CopyDirctory()的方法,可以復製某資料夾連同底下的資料夾與檔案到某個地點....

     

    這個方法有辦法可以套用到上傳方面嗎?

    2007年7月28日 下午 03:26
  • Hi,

    我看你在另一邊的討論區也有問;我自己本身是用wininet.dll去做相關的功能,程式碼部分也是參考sample修改過來的,上面兩個是設定(轉移)目前在ftp server上工作目錄以及在ftp server上開新資料夾的API宣告方式,下面這篇不知道你看過了嗎?http://www.ncis.com.tw/ncis_bbs/viewthread.php?tid=882&extra=page%3D1可以看看參考一下。
    2007年7月29日 下午 12:46
    版主
  •  bauann 寫信:

    Hi,

    我看你在另一邊的討論區也有問;我自己本身是用wininet.dll去做相關的功能,程式碼部分也是參考sample修改過來的,上面兩個是設定(轉移)目前在ftp server上工作目錄以及在ftp server上開新資料夾的API宣告方式,下面這篇不知道你看過了嗎?http://www.ncis.com.tw/ncis_bbs/viewthread.php?tid=882&extra=page%3D1可以看看參考一下。

     

    嗯嗯!

    由於同學要求要用vb.net 2005寫,但之前完全沒接觸過vb.net,vb.....很多基礎都不太清楚,就直接寫ftpclient...所以問題頗多的! 加上他的需求變來變去的....撰寫過程無形中添加了不少麻煩!

    因為後來同學的需求又變了...

    致後來的介面改了,依他的需求,現在是先弄成http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1925979&SiteID=14這個帖子所討論的類似作法!! 先有個簡單的版本~

    大大這篇文章我只有稍微看過,可能要等上述的簡單版本弄好後再進一步研究...

    感謝大大的指點及回覆!!

    2007年7月30日 上午 03:38