- PR -

FTPコマンドの「lcd」に相当するFTPコマンドは?

1
投稿者投稿内容
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-07-08 16:04
Socket を使って、FTPクライアントを作っているのですが、
コマンドラインからFTP接続した時の「lcd」に相当するコマンドは何を送ればよいのでしょうか?

もしかして、ローカルのカレントディレクトリにダウンロードしてきて、
Runtime#exec で 「mv」処理するしかないのでしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-08 17:14
そのFTPクライアントの仕様次第だと思うんですが、カレントディレクトリの情報を持って
いないのでしょうか。持っているのであれば、そのカレントディレクトリを変更するだけ
だと思うのですが。
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-07-08 17:39
ukさん、ご返信ありがとうございます。

一応、処理のはじめに
String bashCmd = "bash -c \"cd " + prop.getProperty("FTPDIR_LOCAL") + "\"";
Process process = Runtime.getRuntime().exec(bashCmd);

を入れて、ダウンロードされるローカルディレクトリを指定しているのですが、ダメでした。
プログラムが実行されているカレントにダウンロードされてきます。

よく分からないです。。。
soluna
ベテラン
会議室デビュー日: 2004/06/15
投稿数: 59
投稿日時: 2004-07-08 18:06
作ったFTPクライアントで、取得したファイルを書き込むときに、
フルパスで書き込み先を指定してあげれば良いのではないですか?
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-07-08 18:07
引用:

String bashCmd = "bash -c "cd " + prop.getProperty("FTPDIR_LOCAL") + """;
Process process = Runtime.getRuntime().exec(bashCmd);


こ、これはムリです。カレントディレクトリというのはプロセス毎の属性ですから、新たにforkされたbashのカレントディレクトリが変わるだけで、その親であるJVMには影響がありません。

というわけでFTPクライアントソフトが、自前で「カレントディレクトリ」という概念を管理すれば良いんじゃないでしょうか。

つまり覚えておくわけです。今どこをカレントディレクトリと扱うのか。で、ダウンロードするときは「今自分がカレントディレクトリだと思っているところ」へダウンロードすればよいでしょう。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-07-08 18:09
引用:

かつやさんの書き込み (2004-07-08 17:39) より:
一応、処理のはじめに
String bashCmd = "bash -c "cd " + prop.getProperty("FTPDIR_LOCAL") + """;
Process process = Runtime.getRuntime().exec(bashCmd);

を入れて、ダウンロードされるローカルディレクトリを指定しているのですが、ダメでした。
プログラムが実行されているカレントにダウンロードされてきます。


これでは、Runtime#execで生成される子プロセスのカレントディレクトリが変わるだけです。
子プロセスはcdコマンドを実行しただけで終了するので、何もしていないのと同じです。

そもそも「ダウンロード」の処理をどのように実行しているのでしょうか?
ソケットを使っている、とのことなので自力でFTPサーバとやりとりしているのかと思って
いましたが…
まず、そこから書いてみてください。
かつや
ベテラン
会議室デビュー日: 2004/01/19
投稿数: 70
投稿日時: 2004-07-08 18:25
みなさん、ご返信ありがとうございます。

Runtime#exec() は子プロセスを作るだけですので、無理ですね。
書き出すファイル名を指定する時に、ディレクトリを追加してやれば良かった訳ですね。

早速、やってみます。
1

スキルアップ/キャリアアップ(JOB@IT)