ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

FTP upload

先日のですが。
次はスレッド(というか、並列処理というのが適切)周りを確認したいと言っていましたが、まだまだ基礎も出来ていないのに高度な事をやっても意味が無いなぁ。。。と思って。
引き続き簡単そうな機能を確認してみました。大体15分くらいで9割くらい出来たのですが、ftp:nlistの使い方に30分くらい悩んだ挙句、面倒臭くなって(今回は)諦めました。今後の課題という事で。

% less -N ./myftp.erl
      1 -module( myftp ).
      2 -export( [upload/6] ).
      3
      4 upload( Host, User, Password, LocalDir, RemoteDir, FileList ) ->
      5         {ok , Ftp} = ftp:open( Host ),
      6         ftp:user( Ftp , User , Password ),
      7         case filelib:is_dir( LocalDir ) of
      8                 true ->
      9                         ftp:mkdir( Ftp , RemoteDir ),
     10                         ftp:lcd( Ftp , LocalDir ),
     11                         ftp:cd( Ftp , RemoteDir ),
     12                         lists:foreach(  fun( File ) ->
     13                                         io:format( "uploading: ~s(~p) => ~p~n",
     14                                                 [File, filelib:is_file( File ), ftp:send( Ftp , File )] )
     15                                 end,
     16                         FileList ),
     17                         lists:foreach(  fun( File ) ->
     18                                         io:format( "delete: ~s => ~p~n",
     19                                                 [File, ftp:delete( Ftp , File )] )
     20                                 end,
     21                         FileList ),
     22                         ftp:rmdir( Ftp , RemoteDir ),
     23                         ftp:close( Ftp )
     24         end.

% /usr/bin/erl
Erlang (BEAM) emulator version 5.5.2 [source] [async-threads:0] [kernel-poll:false]

Eshell V5.5.2  (abort with ^G)
1> m( ftp ).
Module ftp compiled: Date: December 3 2006, Time: 16.36
Compiler options:  [{d,'SERVER_SOFTWARE',"inets/4.7.6"},
                    {cwd,"/tmp/buildd/erlang-11.b.2/lib/inets/src/ftp"},
                    {outdir,"/tmp/buildd/erlang-11.b.2/lib/inets/src/ftp/../../ebin"},
                    {i,"/tmp/buildd/erlang-11.b.2/lib/inets/src/ftp/../inets_app"},
                    {attribute,insert,app_vsn,"inets-4.7.6"},
                    {parse_transform,sys_pre_attributes},
                    debug_info]
Object file: /usr/lib/erlang/lib/inets-4.7.6/ebin/ftp.beam
Exports:
account/2                     nlist/1
append/2                      nlist/2
append/3                      open/1
append_bin/3                  open/2
append_chunk/2                open/3
append_chunk_end/1            pwd/1
append_chunk_start/2          quote/2
cd/2                          recv/2
close/1                       recv/3
code_change/3                 recv_bin/2
delete/2                      recv_chunk/1
force_active/1                recv_chunk_start/2
formaterror/1                 rename/3
handle_call/3                 rmdir/2
handle_cast/2                 send/2
handle_info/2                 send/3
init/1                        send_bin/3
lcd/2                         send_chunk/2
lpwd/1                        send_chunk_end/1
ls/1                          send_chunk_start/2
ls/2                          start_link_sup/1
mkdir/2                       terminate/2
module_info/0                 type/2
module_info/1                 user/3
                              user/4
ok
2> c( "./myftp.erl" ).
{ok,myftp}
3> myftp:upload( "FTP ServerName", "FTP UserName", "FTP UserPassword", "localDir", "remoteDir", [ "a.txt","e.txt"] ).

=INFO REPORT==== 14-May-2007::12:52:26 ===
The inets application was not started. Has now been started as a temporary application.
uploading: a.txt(true) => ok
uploading: e.txt(true) => ok
delete: a.txt => ok
delete: e.txt => ok
ok

時間が無いので今日はココまで。
少しでも実践的になるようエラーチェックや戻り値のチェックは厳しくしていかないと。