3
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool GetDiskFreeSpaceEx(
            string lpDirectoryName,
            out ulong lpFreeBytesAvaliable,
            out ulong lpTotalNumberOfBytes,
            out ulong lpTotalNumberOfFreeBytes);

        // Returns free disk space from directory.
        public static ulong GetFreeDiskSpace(string directory)
        {
            ulong a, b, c;

            if (GetDiskFreeSpaceEx(directory, out a, out b, out c))
            {
                Debug.WriteLine(a);
            }


            return a;
        }

Windows ストア アプリを開発しています。呼び出し時に変数に 0 が含まれる理由:

GetFreeDiskSpace("C:\\");

?

Debug.WriteLine(a) のある行は実行されません。

4

2 に答える 2

1

別のことを調べたところ、「Windows 8 Metro Apps では、KnownFolders の外にあるフォルダーやドライブにアクセスすることは許可されていません。」という答えが見つかりました。

MSDN

于 2013-03-15T20:27:50.733 に答える
0

ドライブの書き方が間違っています。これである必要があります:

GetFreeDiskSpace("C:");

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetDiskFreeSpaceEx(
    string lpDirectoryName,
    out ulong lpFreeBytesAvailable,
    out ulong lpTotalNumberOfBytes,
    out ulong lpTotalNumberOfFreeBytes);

これも別のページで見つけました。WinRTでは違う

Metro スタイル アプリから空きディスク領域を取得できません

static void TestDiskSpace()
{
    IStorageFolder appFolder = ApplicationData.Current.LocalFolder;
    ulong a, b, c;
    if(GetDiskFreeSpaceEx(appFolder.Path, out a, out b, out c))
        Debug.WriteLine(string.Format("{0} bytes free", a));
}
于 2013-03-14T16:51:20.167 に答える