プチコン3号&BIGまとめWiki

SDカードの空き容量を取得する方法

どのように取得するのか

FREEMEMが空き容量だと勘違いしてる人が多いですが、FREEMEMはSDカードの空き容量ではなく、プチコン内部のメモリ容量(RAM)です。

では、どのように取得するのかというと、FILESを使用します。 FILESでSDカードの空き容量を調べられると聞いたことがある人が、その方法がわからないという人もいると思います。

本題

  1. FILES

このように入力するとそのプロジェクトにあるファイルが出ます。

 

そして最後に、

  1. −− 123456 Kbytes free −−

このようなのが出ます。これを利用します。

 

ただ、FILES単独だと、

  1. == Press ENTER ==

このようなものが表示され、Aボタンを連打する羽目になることがあります。

 

これを防ぐため、

  1. FILES ”DAT:SYS”

を使用します。これだと、必ず1画面に収まります。

プログラムリスト

  1. DEF CHKSDROM()
  2.  DIM F[12]
  3.  DIM FL$[0]
  4.  VAR I
  5.  VAR F$
  6.  CLS
  7.  FILES ”DAT:SYS”,FL$
  8.  FILES ”DAT:SYS”
  9.  FOR I=0 TO 11
  10.   F[I]=CHKCHR(3+I,1+LEN(FL$))
  11.   IF F[I]==32 THEN BREAK
  12.  NEXT
  13.  FOR I=0 TO 11
  14.   IF F[I]==32 THEN BREAK
  15.   F$=F$+CHR$(F[I])
  16.  NEXT
  17.  CLS
  18.  RETURN VAL(F$)
  19. END

単位変換

上のプログラムリストだと、KB単位の容量が取得できます。KB以外を使いたい場合もあるかもしれません。 例えば、MB単位にしたい場合は

  1. R_KB=CHKSDROM()
  2. R_MB=R_KB/1024

このようにすればいけます。

以下に対応表を載せておきます。

単位KBからの倍率
MBKB/1024
GBKB/1024/1024
ブロック*1KB/128

コメント

  • Na : WIDTH 16だとFILES”SYS”でも1画面に収まらないのでFILES”DAT:SYS”が確実だと思います (2020/05/05 (火) 16:40:59)
  • 名無しさん(投稿者) : 修正しました。 (2020/05/05 (火) 16:47:45)
  • あまさとしおん : なんでわざわざSYSプロジェクト指定なのかと思ったけど、新規に保存できないSYSなら表示件数が増えて画面外にはみ出る事故が起きないからなのね (2020/05/05 (火) 18:06:00)
  • あまさとしおん : プログラムリストを取り込んで実行したところ、1行目と12行目がシンタックスエラーですね。 (2020/05/05 (火) 18:16:21)
  • あまさとしおん : 1行目はR=がいらない。12行目は括弧の数がおかしいようです。 (2020/05/05 (火) 18:17:25)
  • あまさとしおん : 面倒だったので根本修正版を作成。独立ページ作るんだったらちゃんと動作確認してから載せてほしい。 http://petitverse.hosiken.jp/community/petitcom/diary/?read=4142 (2020/05/05 (火) 18:32:01)
  • 名無しさん(投稿者) : 直しました。 (2020/05/05 (火) 19:06:38)
  • 名無しさん(投稿者) : もとのプログラムはDEFに入れてなかったので、無理やりDEFにしたことによるミスです。 (2020/05/05 (火) 19:08:56)
  • 名無しさん(投稿者) : (ついでに言うと、もとのプログラムはFILESもSYS指定じゃなくて、普通にFILESだけでした。) (2020/05/05 (火) 19:13:25)
  • Na : いちいちCHKCHRの結果を配列変数に入れてから取り出してる理由がよくわかんないです (2020/05/06 (水) 13:24:18)
  • 名無しさん(投稿者) : ↑配列に1桁目、2桁目…みたいな感じで入れています。むしろ配列に入れずに取り出すとか(自分の技術じゃ)出来ないと思います。 (2020/05/06 (水) 14:15:14)
  • Na : FORループを1回にすれば?
    FOR I=0 TO 11
     C=CHKCHR(3+I,1+LEN(FL$))
     IF C==32 THEN BREAK
     F$=F$+CHR$(C)
    NEXT (2020/05/06 (水) 14:24:46)
  • 名無しさん(投稿者) : FOR1回にしたらBREAKでバグる気が…() (2020/05/06 (水) 16:47:09)
  • ugly777 : FL$ではなくCSRYを使えば良いのでは? (2020/05/06 (水) 17:26:58)
  • Na : ↑2 BREAKでバグるとは? (2020/05/06 (水) 17:46:58)
  • Na : 確かにCSRYの方がよさそう (2020/05/06 (水) 17:50:35)
  • takkunplay : CSRYやWHILEを使って行数をかなり減らせます
    1. DEF FREEROM()
    2.  FILES ”DAT:SYS”
    3.  VAR ROM$,X=3,Y=CSRY
    4.  WHILE CHR$(CHKCHR(X,Y))
    5.   ROM$=ROM$+CHR$(CHKCHR(X,Y))
    6.   INC X
    7.  WEND
    8.  CLS
    9.  RETURN VAL(ROM$)
    10. END
    (2020/05/06 (水) 21:36:56)
  • ugly777 : 今気付きましたがROMではないですね。
    (自分もある時指摘されるまで勘違いしていた) (2020/05/06 (水) 21:42:56)
  • ugly777 : 作ってみた
    BIGでは容量が表示されないので-1を返すおまけ付き
    1. DEF FREESD()’某OSに似てる!
    2.  DIM S$,X,C
    3.  FILES ”DAT:SYS”
    4.  FOR X=3 TO X+1
    5.   C=CHKCHR(X,CSRY−1)
    6.   IF 48<=C && C<=57 THEN
    7.    S$=S$+CHR$(C)
    8.   ELSE BREAK
    9.   ENDIF
    10.  NEXT
    11.  CLS
    12.  RETURN VAL(S$)−(HARDWARE==2)
    13. END
    (2020/05/06 (水) 22:31:20)
  • Na : 変なやり方してみました
    DEF FREESD()
     IF HARDWARE==2 THEN RETURN -1
     FILES ”DAT:SYS”
     VAR X%,F%,C%
     FOR X%=3 TO X%+C%
      F%=F%*10+C%
      C%=CHKCHR(X%,CSRY-1)-48
     NEXT
     CLS
     RETURN F%
    END
    X%+C%は無限ループにしつつC%<0なら終了するという意味です (2020/05/06 (水) 23:10:22)
  • Na : ↑4 WHILE 文字列は無限ループになります (2020/05/06 (水) 23:17:04)
  • Na : ↑4 SDカードはフラッシュメモリですがフラッシュEEPROMともいうらしいのでROMでも間違いではないと思います (2020/05/06 (水) 23:24:12)
  • takkunplay : 訂正 WHILE CHR(CHKCHR(X,Y))!=" " (2020/05/07 (木) 07:22:20)
  • 名無しさん(投稿者) : FILES ”DAT:SYS”だけだったら容量表示されない気が() (2020/05/07 (木) 07:24:10)
  • takkunplay : 4行目が間違ってました これで無限ループにはならないと思います (2020/05/07 (木) 07:24:29)
  • takkunplay : ついでにB,MB,GB,ブロックに変換できる機能つけた版
    1. DEF FREESD(MODE)
    2.  FILES ”DAT:SYS”
    3.  VAR ROM$,ROM,X=3,Y=CSRY−1
    4.  WHILE CHR$(CHKCHR(X,Y))!=” ”
    5.   ROM$=ROM$+CHR$(CHKCHR(X,Y))
    6.   INC X
    7.  WEND
    8.  CLS
    9.  IF MODE==0 THEN ROM=VAL(ROM$)*1024
    10.  IF MODE==1 THEN ROM=VAL(ROM$)
    11.  IF MODE==2 THEN ROM=VAL(ROM$)/1024
    12.  IF MODE==3 THEN ROM=VAL(ROM$)/1024/1024
    13.  IF MODE==4 THEN ROM=VAL(ROM$)/128
    14.  RETURN ROM
    15. END
    (2020/05/07 (木) 07:33:59)
  • Na : ↑3 投稿者さんはここのコメント欄に書かれたコードを全部試したうえでコメントしてますか? (2020/05/07 (木) 10:04:13)
  • 名無しさん(投稿者) : ↑試してません。FILES ”DAT:SYS”の件は勘違いでした。 (2020/05/07 (木) 10:54:31)
  • 名無しさん : takkunplayはTAFUO5さんみたくプログラムできない人だと思ってた(おもちつきで変な曲、譜面ばかり作るので) (2020/06/22 (月) 10:54:13)
  • 名無しさん : ↑そういう偏見を何故わざわざ書くのか (2020/06/22 (月) 11:45:07)
  • 名無しさん : takkunplay、おもちつきの譜面はまともに作れないくせに、プログラミングはできるのムカつくわ() (2020/10/06 (火) 08:02:00)
  • Gold dish : 比較してるのおかしすぎだろ (2020/10/06 (火) 16:19:40)
  • 名無しさん : ↑誰だよ (2020/10/06 (火) 18:30:30)
  • 名無しさん : ↑2
    ?Gold_dish==Kazusoft
    1
    OK (2020/10/06 (火) 18:35:30)

※コメント欄は閉鎖しました。

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 1 人がこのサイトを見ています
  • このページはこれまでに 826 回、本日は 1 回、昨日は 0 回閲覧されました

ページの先頭に戻る

*1 3DSの本体設定で出るもの

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.106 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:49 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30