ファイルの受け渡しについて


橋本  2005-03-09 04:37:40  No: 13672

はじめまして。
現在、家族内でのPC間のファイルの受け渡しは、媒体またはメールでやっているのですが、それでは効率が悪いということでDelphiでファイルを受け渡しできるアプリケーションを作成しようと考えています。
共有ファイルを作ればいいのですが、父や子供もPCを使うため、難しい操作はなしで簡単に実現できるようにしたいと考えています。また、特定の相手だけにファイルを渡したいときもあります。
家内は無線LANでつながっているので、ファイルコピー関数などで相手先のPCに直接コピーすることは不可能なのでしょうか?また、ほかに何かいい方法はないでしょうか。
delphiの勉強も兼ねて、このアプリケーションを完成させたいので、皆さんの知恵を貸していただければ幸いです。
よろしくお願いします。


にしの  2005-03-09 05:21:35  No: 13673

ネットワーク越しにファイルをコピーしたい、ということですよね。
いろいろ方法はあると思います。

どのようなファイルを渡したいのでしょうか。
共有フォルダを1度設定しておけば、簡単に参照できそうですが、その操作も難しいのでしょうか。
デスクトップにフォルダを作り、そのフォルダのプロパティを変更するだけですが。

共有フォルダであれば、単純なファイルコピー関数でOKです。
固定パス(例えばC:\ShareFolder)でよければ、プログラミングも楽になります。

共有フォルダを作らない場合、送信元PCから、送信先PCへファイルを送ることになります(TCPやUDPなどの通信での送信となります)。
手順としては、送る側を自分、受け取る側を相手とすれば、
自分:「相手」へ接続要求
相手:「自分」へ接続許可
自分:ファイルの転送開始
相手:ファイルの受信開始
自分:切断
相手:切断
となります。
# かなりいい加減です

Delphiの勉強ということであれば、共有フォルダを事前に用意して、どのPCにコピーするかを選び、そこにコピーというのが楽かと。

Delphiに慣れてきたのなら、TCPやUDPでファイル転送プログラムに挑戦してみてはどうでしょう。

以下、長いですが余談です。
> 難しい操作はなしで簡単に実現できるようにしたい
一般的に、「簡単な操作」=「難しいプログラム」です。
「簡単な操作」と一言で片付けるといかにも簡単そうですが、実際には
・どの状態のときに、どういう操作をすると、どういう機能が働く
というのをプログラミングしなければなりません。

例えば、

・ファイルドラッグで選べるようにするのか(エクスプローラとマウスになれていれば必要でしょう)
・ダイアログで選択を出すか(Wordなどの「ファイル名をつけて保存」になれていれば必要でしょう)
・複数ファイルの扱い(複数ファイルを1つずつ送るのは面倒なので、複数ファイル同時に送ることもあるでしょう)
・フォルダごとドラッグされた場合どうするか(フォルダの中にはフォルダが含まれているかもしれません)
・送り先PCの保存ドライブに空き容量が足りない場合どうするか(すぐ渡したいファイルなのにコピーできないと困りますよね)
・保存先を選べるようにするのか

などの問題が出てくると思います。

まずは、どういうインターフェースが簡単な操作になるか、検討してみてはどうですか?


橋本  2005-03-11 04:45:11  No: 13674

にしのさん、返事が送れてすみません。
レスありがとうございます。
>まずは、どういうインターフェースが簡単な操作になるか、検討してみてはどうですか?
ということで私なりに、考えてみました。
家族全員が簡単にファイルの受け渡しができるためにシンプルなフォームにしたいと考えています。
フォームにはTListとTEditを1個づつのみ表示し、TListには家族の名前の一覧が表示されます。
名前の一覧から、ファイルを送りたい相手を選択して、TEditにファイルをドラッグ&ドロップでファイルを相手に渡せるという風にしたいです(相手を選択しなければ、全員にファイルを渡す)。
ファイルを受け取る方は、いつのまにかデスクトップにファイルが置かれているという状態になります(すぐに目に付くため)。
ファイルを受け取る方も、送るほうも本アプリケーションを起動させておくということを前提としています。

私も、Delphiは半年ほど経験しておりますので、少々のことはできると自負しています。

また、共有ファイルを利用するということですが共有ファイルだと「特定の相手だけにファイルを送る」が少し難しいのではないでしょうか。まあ、家族の中に共有ファイルのシステムを知っている人間はいないと思いますが。。それに、家族といえども、相手のPCを触るというのは少し抵抗がありますので共有ファイルを使わない方法で実現させたいと思っています。よって、TCP、UDPソケットで実現したいです。

やり取りするファイルは、デジカメの写真等で、大きくても50MB程度です。

問題点ですが、
>・送り先PCの保存ドライブに空き容量が足りない場合どうするか
この場合は、警告などをするようにしたいと思っています。
>・複数ファイルの扱い
これは、できれば実現したいという問題です(ソケットで実現は難しそうですから)。
保存先はデスクトップ固定で、あとは、使用上それほど問題ないかと思っています。

TCP、UDPソケットを使ったアプリケーションの作成はまだありませんが、私自身が努力しますのでソケットの使い方や実現方法のアドバイスなどをいただけないでしょうか。
よろしくおねがいします。


メラトニン  2005-03-11 05:16:13  No: 13675

とりあえず概念だけでも良いのでTCP関連の本を一読しましょう。
Delphiのサンプルだと
C:\Program Files\Borland\Delphi7\Demos\Internet\NetChat
でTCPを使ったTcpClient,TcpServerのサンプルがあります。


にしの  2005-03-11 05:24:20  No: 13676

Delphi7であれば、Indyをお薦めします。
IndyのDemoも、Webで公開されています。
http://www.indyproject.org/

なかでも、TCPStreamClientServerは、この件にぴったりのサンプルだと思いますよ。


にしの  2005-03-11 05:43:25  No: 13677

追記です。
TCP関連の本でお薦めの本を1つ紹介します。
# TCPだけではありませんが

「インタ−ネットRFC事典」
ISBN:4756118887
マルチメディア通信研究会 アスキ− 1998/11出版 
\9,975(税込)

細かいコーディング方法などはありませんが、RFCの主要項目を網羅しているもので、読み応えたっぷりです。
ちなみに、昼寝用の枕になるかもしれないくらいの厚さです。


橋本  2005-03-13 04:06:11  No: 13678

にしのさん。メラトニンさん。レスありがとうございます。
にしのさんには少し申し訳ないですが、今は大学時代につかった、TCP/IPの本をもう一度読み直しています。
基本的な概念は理解しているつもりです。が、Indyのコンポーネントと、標準のserver/clientsocketとは、どこが違うのでしょうか。
また、ひとつ思ったのですが、ファイルを渡そうとした相手がPCを立ち上げているかどうかということも考えなければなりませんね。ファイルを転送するならば、TCPの方が適していると思いますがアプリケーションを起動しただけで相手の状況を把握するためにはTCPではなく、UDPを利用したほうがよいように思うのですがどうでしょうか(どのようにプログラムするのかはわかりませんが・・)。他によい方法がありましたら、お願いします。

仕事の合間にやっているので少し進歩が遅いですが、もう少しTCPについて本を読んでみることにします。

難しいプログラムになりそうですが、よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加