0

SQL Server Express 2005 を実行しているクライアントがあり、それぞれに毎月バックアップが必要であり、バックアップが失われた場合に備えて、そのバックアップをサーバーに移動する必要があります。当社のソフトウェアは毎月データベースを自動的にバックアップしますが、手動でデータベースにアクセスしてコピーする必要があります。おそらく FTP を使用して、毎月最大 800 MB のファイルを彼らのマシンから私たちのマシンに自動的にコピーする方法はありますか? また、FTP を使用している場合、接続が失われた場合に備えて再開をサポートする必要があります。この機能を、.net フレームワークのみを必要とし、サード パーティのコントロールを使用しない VB.net アプリケーションに記述したいと考えています。

4

3 に答える 3

2

自家製のソリューションではなく、RSyncのようなものを使用した方がよいと思います。

于 2010-02-19T12:05:49.637 に答える
0

確かに、WebClient クラス、または (Ftp)WebRequest/WebResponse 一連のクラスのいずれかで実行可能です。必要に応じて、サンプル コードを提供できます。選択。

編集;

WebClient ルートは最も単純ですが、あまり制御できません。

Imports System.Net
...
Dim Client As New WebClient
Client.DownloadFile("ftp://ftp.example.com/Database.bak", "D:\Backups\Database.bak")

もう少し制御が必要で、FTP レジュームを管理する場合は、次のような方法でうまくいきます。

Public Sub TransferFile(ByVal SourcePath As String, ByVal DestinationPath As String)

    Dim SourceRequest As FtpWebRequest

    Dim Buffer(4095) As Byte
    Dim BytesRead As Integer

    ' Assumes source is on FTP server...
    SourceRequest = DirectCast(WebRequest.Create(SourcePath), FtpWebRequest)
    SourceRequest.Method = WebRequestMethods.Ftp.DownloadFile

    ' If we already have a local file, then resume from the end of it...
    SourceRequest.ContentOffset = If(File.Exists(DestinationPath), New FileInfo(DestinationPath).Length, 0)

    ' Assume destination file is local/UNC file. FileMode.Append will create a new file if one doesn't exist.
    Using DestinationFile As New FileStream(DestinationPath, FileMode.Append, FileAccess.Write, FileShare.None)
        Using SourceResponse As WebResponse = SourceRequest.GetResponse()
            Using SourceStream As Stream = SourceResponse.GetResponseStream()

                Do

                    BytesRead = SourceStream.Read(Buffer, 0, Buffer.Length)
                    DestinationFile.Write(Buffer, 0, BytesRead)

                    ' Calculate speed, progress, show to user/log, etc...

                Loop While BytesRead > 0

            End Using
        End Using
    End Using

End Sub

これは、FTP -> ローカルから転送していることを前提としています。ユーザー名/パスワードは、SourcePath と同じように指定できます。ftp://ユーザー名:パスワード@ftp.mysite.co.uk

お役に立てれば。

于 2010-02-19T12:13:37.643 に答える
0

別の代替手段は、FTP 間の同期をサポートし、毎日/毎週/毎月実行するようにスケジュールでき、何年もの間、あなたが話していることを実行するために私のために働いてきた SyncBack のようなプログラムを使用することです。FTP転送の再開についてはよくわかりませんが、FTPを介して物事をバックアップするという素晴らしい仕事をしています.

于 2010-02-19T12:20:25.723 に答える