質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

8149閲覧

FTPサーバ向けのアップロードについて、同名ファイルが上書かれることを抑制したい。

saya24

総合スコア222

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/12/23 12:42

FTPサーバ側の所定フォルダへ毎回同じ名前のファイルがアップロードされる仕組みがあります。サーバ側の処理の関係で、FTPによって配置されるファイルは 同名である必要がありますが、当該機能の利用者が複数いる状況を鑑み、上書きを抑制する策を投じたいです。
FtpWebRequest にそのようなオプションは あるのでしょうか?

ASP.NET

1Protected Sub btnFileUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFileUpload.Click 2 3 If FileUpload1.HasFile Then 4 5 Dim now As DateTime = DateTime.Now 6 Dim Path As String = "C:\temp\" & now.ToString("yyyyMMddHHmmss") & "\" 7 Dim fileName As String = FileUpload1.PostedFile.FileName 8 Dim filePath As String = Path & fileName 9 10 System.IO.Directory.CreateDirectory(Path) 11 FileUpload1.SaveAs(filePath) 12 13 'アップロード先のURI 14 Dim reqUri As New Uri("ftp://XX.XX.XX.XX/rcv/abcdefg.txt") 15 16 Dim ftpReq As FtpWebRequest = FtpWebRequest.Create(reqUri) 17 18 'アップロードに設定 19 ftpReq.Method = WebRequestMethods.Ftp.UploadFile 20 21 'ユーザー名とパスワードを設定 22 ftpReq.Credentials = New NetworkCredential("9999999", "hogehoge") 23 24 '要求の完了後に接続を閉じる 25 ftpReq.KeepAlive = False 26 27 'ASCIIモードで転送する 28 ftpReq.UseBinary = False 29 30 'PASVモードを無効にする 31 ftpReq.UsePassive = False 32 33 'ファイルをアップロードするためのStreamを取得 34 Using reqStrm As Stream = ftpReq.GetRequestStream() 35 36 'アップロードするファイルを開く 37 Using fStrm As New FileStream(filePath, FileMode.Open, FileAccess.Read) 38 'アップロードStreamに書き込む 39 Dim buffer(1023) As Byte 40 While True 41 Dim bSize As Integer = fStrm.Read(buffer, 0, buffer.Length) 42 If bSize = 0 Then 43 Exit While 44 End If 45 reqStrm.Write(buffer, 0, bSize) 46 End While 47 End Using 48 49 End Using 50 51 lblMsg.ForeColor = Drawing.Color.Blue 52 lblMsg.Text = "ファイルのアップロードが完了しました。" 53 End If 54 55 End Sub 56 57 58End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2019/12/25 07:54

質問がアバウトすぎます。 「そのようなオプション」とはどのようなオプションで、何が指定できて、各指定ごとに既存のどんな動作が具体的にどういう条件でどうなるものですか? それで実装が正確にできるレベルで具体的に記述してください。 また、FtpWebRequestは以下で解説されています(.NET Framewrok 4.8)。 https://docs.microsoft.com/ja-jp/dotnet/api/system.net.ftpwebrequest?view=netframework-4.8 そのどの辺が不明なのでしょうか?具体的に引用してください。
saya24

2019/12/26 10:15

dameo様 ご支援ありがとうございます。 >「そのようなオプション」とはどのようなオプションで、 ローカルからアップロードされるファイルの同一ファイル名が、サーバの所定フォルダ(仮想jフォルダ)に実在していない場合に限りアップロードを行いたく、同一ファイルが存在していたら、Exceptionを検知する動作はできないか? というのが希望です。サーバ上のファイルを上書きしたくないの一言ですが、相変わらず 的はずれな回答を致しておりましたら 申し訳ありません。 記事の紹介ありがとうございます。 アップロード前に 当該ファイルのダウンロードを試み、存在していないことを検知したらアップロードへ進めばよい、ということですかね... 分かりが悪くすみません。
dameo

2019/12/26 10:31

質問の訂正依頼をしたつもりなのですが… そして、そのコメントにも ・何が指定できるのか? ・各指定ごとに既存のどんな動作に影響するのか? ・各指定ごとに既存の各動作にどういう条件で影響するのか? ・各指定ごとに既存の各動作が各条件でどう変わるのか? 記述されていません。あなたが最終的にやりたいことをいくら書いても仕方ないです。 FtpWebRequestの件では、私は回答をしていません。 当然読んでいるはずのWebページのどこが疑問なのかを聞いているだけです。
guest

回答1

0

FTPは単純な仕組みなので、合わせ技でやるしかない気はします。ご質問から最終的にどうなれば目的が達成できるかは分かりませんが、

  • アップロード中のファイルをダウンロードされたくない
  • 同名ファイルで同時にアップロードされたくない

このへんでしょうか?

  1. アップロード用のバッティングしないユニークなファイル名でアップロード
  2. 元ファイルを削除orバックアップ用の名前にリネーム(ここはよく考えてください)
  3. アップロードしたファイルを元ファイル名にリネーム

のような手順であれば、とりあえず同時に書き込まれたり、中途半端なファイルをダウンロードされるというのは防げると思います。

投稿2020/04/23 00:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問