喫茶XRAYトップページ


[2929] Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/10 (日) 13:37:03 Mr.XRAY
みなさんこんにちは.

http://mrxray.on.coocan.jp/Delphi/plSamples/773_Indy_FTPGetPut.htm

をDelphi2010のコードにしようかと,やり始めました.
Windows XP(SP3) + Delphi2010(UP5)です.
Delphi2010に入っているIndyは10.5.5です.

FTPGetのサンプルをいざ実行! あれ?
'ファイルが見つかりません.'

調べたら,FileSize := IdFTP1.Size(SourceFile); に-1が戻っています.
ソースを追いかけたが分かりません.
そこで,このファイルサイズの検出部分をなくして実行.
見事ダウンロードできるようになりました.
いくつかのzipファイルで確認.OKでした.

Delphi2009でも同じ現象です.

ダウンロードサイトに行ってみました.
ftp://indy.fulgan.com/ZIP/
非常に最近のがありました(2010/01/10版)
ダウンロードしてDelphi2009にインストール

http://homepage1.nifty.com/ht_deko/tech033.html
(ありがたいですな〜.感謝,感謝).

おっ,Sizeメソッドが有効になっている.と喜んだのもつかの間でした.
ダウンロードしたファイルサイズが少し大きく,壊れた書庫になっています.
う〜ん.困りました.
Indyさんお願い.頼りにしていまっせ.

という訳で,Delphi2009以降への対応は見送りといたします.
ちなみにIndyのバージョンは,10.5.7になりました.


[2930] Re:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/11 (月) 00:26:58 たたみや
▼ Mr.XRAYさん

マスター、明けましておめでとう御座います。
本年も宜しくお願い致します。
早速ですが、

> 調べたら,FileSize := IdFTP1.Size(SourceFile); に-1が戻っています.
> ソースを追いかけたが分かりません.
> そこで,このファイルサイズの検出部分をなくして実行.
> 見事ダウンロードできるようになりました.
> いくつかのzipファイルで確認.OKでした.


私も昨年XP(sp3)+delphi6+Indy10(バージョンは忘れました)の環境で
ファイルサイズをチェックする関数を試しましたが、同様の結果でした。
これはあてに出来ないと思い、この部分は無視してDL処理するようにしました。

> おっ,Sizeメソッドが有効になっている.と喜んだのもつかの間でした.
> ダウンロードしたファイルサイズが少し大きく,壊れた書庫になっています.

何と!?
新しいのでもだめでしたか。。。
蛇足だとは思いますが、オプションの指定で、アスキーかバイナリかの指定が
あったと思いましたが、この指定が明確でないと失敗したような気がします。

マスターと同じくIndy10のインストール時には、Dekoさんのページには
お世話になりました。
私も倣って激しく感謝ですm(__)m

[2931] Re2:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/11 (月) 09:53:52 Mr.XRAY
▼ たたみやさん

こちらこそ,今年もよろしくお願い致します.
Indy,やはり苦労されましたか.

Indyはバグが多いから,という内容の記事もネット上で見かけますが,
あれだけの機能を実現するには大変です.
便利に使いたいです.
なんとか頑張ってもらいたいものです.

ダウンロードサイトも確認しながら,いろいろチェックしていくつもり
です.


[2941] Re3:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/14 (木) 02:14:42 taka
みなさん こんばんは。

>FileSize := IdFTP1.Size(SourceFile); に-1が戻っています.
IndyのFTPは使ったことは無いですけど、
ソースのLib/Protocols/IdFTP.pasの
TIdFTP.Size にあるコメントを要約すると
 ASCII modeは、サーバーがサイズを拒否するので、
 一時的に内部でftBinary モードに変更して、
 サイズを取得し その後、元のモードに復帰すると書いてあります。
コードもそのような感じでかいてあります。
コメントの日付が、 03/13/2009になっているので
それ以前の日付のindyだとASCII modeだと失敗するのでしょう。

>ダウンロードしたファイルサイズが少し大きく,壊れた書庫になっています.
もしかして、目からX線照射して壊したのでは? ビビビーっと。

暇なとき思い出したら、鉛エプロンつけて、私もidFTP.get試してみます。


[2942] Re4:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/14 (木) 10:03:15 Mr.XRAY
▼ takaさん

ソース追いかけてくださったんですか.どうもです.

> もしかして、目からX線照射して壊したのでは? ビビビーっと。

あっ,これは内緒です.実は私は何を隠そう,銀河系の,とある星から
地球に派遣された監視員なのです.
現在の宇宙年齢は10万... です
デーモン小暮閣下とは遠い親戚筋です.


[2943] Re5:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/14 (木) 10:23:48 Mr.XRAY
> 銀河系の,とある星から

もう何万年も実家に帰ってないな〜.
(いいがげんにしろ?)

http://tanshin-ganba.cocolog-nifty.com/photos/uncategorized/2008/07/27/andromedargb12small.jpg


[2944] Re6:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/15 (金) 15:42:33 taka
▼ Mr.XRAYさん
> > 銀河系の,とある星から
やっぱりビームを・・・
被災地に調査隊が派遣され、報告が届いております。

ココだけの話なんですけど
 マスターの必殺技が
  Form1惑星のIdFTP1国のTransferType 居住区に命中しています

がれきの中で生きているftASCII人が触った物は、
改行の洗礼を受けて質量保存の法則に反して質量が増減するそうです。
そして、アスキー外の文字を触ると怒って叩き壊すそうです。

また、ftASCII人が触った物を元に戻してしまう不思議な能力をもった
質量保存の法則のゴッドハンドの持ち主のftBinary人が生き埋めになって
救助を求めています。

しかし、復興の目途が立っておらず、交通手段が閉ざされていて連絡が取れません。

でもご安心ください。
Form1惑星にTransferTypeコンボボックス衛生、TransferTypeチェックボックス衛生
TransferTypeラジオボックス衛生などを打ち上げると
IdFTP1国のTransferType居住区の人々と直接連絡が取れるそうです。
どうしますか

    // uses IdFTPCommon
    IdFTP1.TransferType := ftBinary;
    IdFTP1.Get(SourceFile,FStream);


[2949] TIdFTPでのGetコマンド(関数)成功!!返信 削除
2010/1/16 (土) 11:53:57 Mr.XRAY
▼ takaさん,やってみました.

>     // uses IdFTPCommon
>     IdFTP1.TransferType := ftBinary;
>     IdFTP1.Get(SourceFile,FStream);


たたみやさんも書いていますが,
(1) TIdFTP1のオブジェクトインスペクタでTransferTypeをftBinary
    NGでした.
(2) コード内でGetの前にftBinaryを指定するコードを書く
    OK

でした.一体なんなんでしょう.
多分オブジェクトインスペクタでの設定は,Get前の初期化時にでもデフォルトに
戻ってしまうのでしょう.ということにしておきます.
もうイヤ!!

ありがとうごさいました.
お客様は神様です.


[2950] Re:TIdFTPでのGetコマンド(関数)成功!!返信 削除
2010/1/16 (土) 11:58:32 Mr.XRAY
> (2) コード内でGetの前にftBinaryを指定するコードを書く
>     OK


動作確認は,とりあえず
Windows XP(SP3) + Delphi2009(UP3) + Indy 10.5.7です.
今,Indyのダウンロードのページをみたら,また新バージョンがUP
されていました.


[2945] Re6:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/15 (金) 15:45:32 taka
あっ!!!
たたみや さんが すでに現地入りしていたではありませんか!!

>蛇足だとは思いますが、オプションの指定で、アスキーかバイナリかの指定が
>あったと思いましたが、この指定が明確でないと失敗したような気がします。




[2948] Re7:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/15 (金) 17:20:23 Mr.XRAY
▼ takaさん

おおっ,情報ありがとうごさいます.
では,また再挑戦してみますか.
いつになることやら.... (^^;

でも,このBinaryとAsciiの件勘違いしていたようです,UPの時だけ設定
が必要だと思っていました.
今考えてみたら,Getされる側からみたらUPになるのか?


[2951] Re8:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/16 (土) 16:16:04 たたみや
▼ マスター & takaさん

こんにちは、

> でも,このBinaryとAsciiの件勘違いしていたようです,UPの時だけ設定
> が必要だと思っていました.

同じく、そう思っていました。
getの時は自動判別かと。。。


>多分オブジェクトインスペクタでの設定は,Get前の初期化時にでもデフォルトに
>戻ってしまうのでしょう.ということにしておきます.

ここら辺なんでしょうね。。。
マスターと同じ地雷踏んでしまいましたね(^^;;)



[2966] Re8:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/20 (水) 13:21:41 taka
▼ Mr.XRAYさん
> ▼ takaさん
>
> おおっ,情報ありがとうごさいます.
> では,また再挑戦してみますか.
> いつになることやら.... (^^;


その後わかったことがありました。
報告することを忘れていました。

 プロパティのデフォルト値の定義が途中のバージョンから
ftBinary→ftAsciiに変更されているようです。
 右クリックで定義検索でソースをたどるとコメントで載っていました。
これが、今回の原因です。
多大な影響を与える変更をIndyがこそっとしていたようです。


デフォルト値に設定した場合は、
プロパティは、内部的には値を保存しない仕様になっています。
そのため2値しか取らない値でデフォルト値の定義を変更すると
どちらの値にしていても全部新しいデフォルト値になってしまいます。

複数のバージョンのIndyで安定して動作させるには、
TransferType は、
コードで強制的に代入するしかないようです。


[2968] Re9:Delphi2010でIndyのサンプルをテスト返信 削除
2010/1/21 (木) 00:00:08 Mr.XRAY
▼ takaさん

> 複数のバージョンのIndyで安定して動作させるには、
> TransferType は、
> コードで強制的に代入するしかないようです。


なるほど,了解しました.
そういうことですか.ありがとうございます.
これで安心してDelphi2010へコード移行ができそうです.


INCM/CMT
Cyclamen v3.82