現在開発しているWindowsMobileのGPSクライアント関連で、
・exeを実行しているパスを知る方法
・空き領域を調べる方法
・EXIFを書きだす方法
を解決するため
.NET Compact Frameworkと.NET Frameworkの違い
.NET Compact Frameworkで出来ないことをちょっと調べた。
■結果
・exeを実行しているパスを調べることはできる。
・(フレームワークの標準機能では)EXIF保存はできない
・c#からAPIを利用してドライブの空きを知ることができる。
■.NET Compact Frameworkと.NET Frameworkの違い
System.Drawing.Imageing.ImageFormatクラスでEXIFがサポートされていない。
→jpegにタグを付けて保存する操作を実現できない。
System.IO.DriveInfoクラスがサポートされていない。
→ドライブの空き容量を調べる手段がない(?)
■実行パスの取得
string appdir;
//アプリケーションディレクトリの取得
appdir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).ToString();
■APIを利用して空き容量を知る方法
PC向けの.NETフレームワーク2.0ならSystem.IO.DriveInfoっていう便利なクラスがあるんだけど、Mobileではドライブっていう概念がないので、DriveInfoも無い。
//空き容量確認
//thanks to http://pinvoke.net/default.aspx/coredll.GetDiskFreeSpaceEx
[DllImport("coredll.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
private double CheckRemain(string drive)
{
double space=0;
ulong FreeBytesAvailable = 0;
ulong TotalNumberOfBytes = 0;
ulong TotalNumberOfFreeBytes = 0;
bool success = GetDiskFreeSpaceEx(drive, out FreeBytesAvailable, out TotalNumberOfBytes,
out TotalNumberOfFreeBytes);
if (!success)
throw new System.ComponentModel.Win32Exception();
//MessageBox.Show("Free Bytes Available:"+ FreeBytesAvailable);
//MessageBox.Show("Total Number Of Bytes:"+TotalNumberOfBytes);
//MessageBox.Show("Total Number Of FreeBytes:"+TotalNumberOfFreeBytes);
space = FreeBytesAvailable;
if (space > 0)
{
space = space / 1024;
}
//MessageBox.Show(space + "MB");
return space;
}
}
■参考サイト
スマート デバイス開発 .NET Compact Framework を使用したデバイスのプログラミング
.NET Compact Frameworkで提供されていない機能は、Wind32 APIを直接呼べばいいよ・・っていうこと知った。
スマート デバイス開発 方法 : プラットフォーム呼び出しを使用して Wave ファイルを再生する (デバイス)
例えば、Weveファイルの操作
ManagedCode
NativeCode
マネージドコードでできること、API呼び出しで実現できることの一覧。
PInvoke.NET
実際のサンプルコードがためになる。
何が出来そうか、眺めているだけでも結構楽しい。
強烈に参考になりました。
RASの接続状態なんかを取れたりするんだね。