コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

ファイルのコピーなど

Luaridaのプログラム内でファイルコピーやフォルダの作成を行いたいときがあるかもしれないので、ちょっと、作ってみました。ソースを載せておきます。

ファイルのコピー

os.execute()を使ってcatコマンドで吐き出しているだけです。toolboxにはcpコマンドが無いようです。(追記:ddコマンドがありました。これを使えばもっといろいろなことができますね。)

------------------------------------------
--ファイルコピー(/sdcard/luarida/以下に限る)
------------------------------------------
function filecopy( src, dest )
 printscrl( "#filecopy "..LuaridaPath..src.." "..LuaridaPath..dest, 14, color(0,0,0),color(255,255,255) )
 os.execute( "cat "..LuaridaPath..src.." > "..LuaridaPath..dest )
end

フォルダの作成

これも、os.execute()を使って、mkdirしているだけです。

------------------------------------------
--ディレクトリの作成(/sdcard/luarida/以下に限る)
------------------------------------------
function mkdir( src )
 printscrl( "#mkdir "..LuaridaPath..src, 14, color(0,0,0),color(255,255,255) )
 os.execute( "mkdir "..LuaridaPath..src )
end

フォルダ一覧

これも、os.execute()を使って、ls -lして、それを画面に表示しているだけです。

------------------------------------------
--ディレクトリの表示(/sdcard/luarida/以下に限る)
------------------------------------------
function dir( src )
local tmpFile = LuaridaPath.."files.tmp"  --ファイル名を書き出すテンポラリファイル
local str
local fp, msg
 printscrl( "#ls -l '"..LuaridaPath..src.."'", 14, color(0,0,0),color(255,255,255) )
 os.execute( "ls -l '"..LuaridaPath..src.."' > "..tmpFile )
 --ファイルを開きます
 fp, msg = io.open( tmpFile, "r")
 if( not(fp) )then
   dialog( tmpFile.."がオープンできません", msg, 0 )
   return
 end
 --内容を読みます
 while(true)do
   str = fp:read("*l")          --1行読み込み
   if( str==nil )then break end --読込むデータが無ければ終了
   str = string.gsub( str,"\r","" ) --改行コードを外す
   printscrl( str, 14, color(0,0,0),color(255,255,255) )
 end
 io.close(fp)
end

サンプルプログラム

上記関数を使ったfilecopy.luaというサンプルプログラムを記載しておきます。

------------------------------------------
--ファイルコピーサンプル
------------------------------------------
--関数宣言--------------------------------
main={}       --mainメソッド
printscrl={}  --スクロールするテキスト表示
filecopy={}   --ファイルコピー(/sdcard/luarida/以下に限る)
mkdir={}      --ディレクトリの作成(/sdcard/luarida/以下に限る)
dir={}        --ディレクトリの表示(/sdcard/luarida/以下に限る)
--グローバル変数宣言----------------------
LuaridaPath="/sdcard/luarida/"  --luaファイルを保存しているPath
------------------------------------------
mt={}
mt.__newindex=function(mtt,mtn,mtv)
  dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 )
  toast("画面タッチで実行を続けます", 1)
  touch(3)
end
mt.__index=function(mtt,mtn)
  dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 )
  toast("画面タッチで実行を続けます", 1)
  touch(3)
end
setmetatable(_G,mt)
--------以下が実プログラム----------------
------------------------------------------
--スクロールするテキスト表示
------------------------------------------
function printscrl( str, fontsize, fcolor, bcolor )
local w,h = canvas.getviewSize()
local sc
  --一度、見えないところにテキストを書いて、改行数を求める
  sc = canvas.drawTextBox( str, 0, h+1, fontsize, fcolor, w )
  --画面の絵をワークエリアに取り込みます
  canvas.getg( 0, fontsize*sc, w-1, h-1, 0, fontsize*sc, w-1, h-1 )
  --取り込んだ画面をスクロールさせて描きます
  canvas.putg( 0, 0, w-1, h-fontsize*sc-1, 0, fontsize*sc, w-1, h-1 )
  --書き出す部分をバックカラーで塗り潰します
  canvas.drawRect(  0, h-fontsize*sc-1, w, h, bcolor, 1 )
  --フラッシュします
  canvas.putflush()
  --スクロールしたところにテキストを書きます
  canvas.drawTextBox( str, 0, h-fontsize*sc, fontsize, fcolor, w )
end
------------------------------------------
--ファイルコピー(/sdcard/luarida/以下に限る)
------------------------------------------
function filecopy( src, dest )
  printscrl( "#filecopy "..LuaridaPath..src.." "..LuaridaPath..dest, 14, color(0,0,0),color(255,255,255) )
  os.execute( "cat "..LuaridaPath..src.." > "..LuaridaPath..dest )
end
------------------------------------------
--ディレクトリの作成(/sdcard/luarida/以下に限る)
------------------------------------------
function mkdir( src )
  printscrl( "#mkdir "..LuaridaPath..src, 14, color(0,0,0),color(255,255,255) )
  os.execute( "mkdir "..LuaridaPath..src )
end
------------------------------------------
--ディレクトリの表示(/sdcard/luarida/以下に限る)
------------------------------------------
function dir( src )
local tmpFile = LuaridaPath.."files.tmp"  --ファイル名を書き出すテンポラリファイル
local str
local fp, msg
  printscrl( "#ls -l '"..LuaridaPath..src.."'", 14, color(0,0,0),color(255,255,255) )
  os.execute( "ls -l '"..LuaridaPath..src.."' > "..tmpFile )
  --ファイルを開きます
  fp, msg = io.open( tmpFile, "r")
  if( not(fp) )then
    dialog( tmpFile.."がオープンできません", msg, 0 )
    return
  end
  --内容を読みます
  while(true)do
    str = fp:read("*l")              --1行読み込み
    if( str==nil )then break end     --読込むデータが無ければ終了
    str = string.gsub( str,"\r","" ) --改行コードを外す
    printscrl( str, 14, color(0,0,0),color(255,255,255) )
  end
  io.close(fp)
end

------------------------------------------
--メインプログラム
------------------------------------------
function main()
  dir( "." )
  mkdir( "tmp" )
  filecopy( "filecopy.lua", "tmp/filecopy.lua" )
  dir( "tmp" )
  toast( "画面タッチで終了します", 0 )
  touch(3)
end
main()