実現したいこと
特定のサーバ上の共有フォルダ(例:\SERVER\Share)にファイルをコピーする前に
共有フォルダの存在するドライブの空き容量を確認し、数値データとして取得する。
(「該当のソースコード」の※部分で、その処理を実行したい)
発生している問題・エラーメッセージ
「試したこと」の1~3で、空き容量情報を含む文字列を取得するところまでは
完了したが、その文字列から、空き容量の数値データのみを取得したいが、
上手くいかない。
(例)
文字列「N個のディレクトリ xx,xxx,xxx,xxx バイトの空き領域」
↑この文字列情報から、xxxxxxxxxxxのみ、取得したい。
該当のソースコード
C#
1static void Main(string[] args) 2 { 3 4 //Processオブジェクトを作成 5 System.Diagnostics.Process p = new System.Diagnostics.Process(); 6 7 //ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定 8 p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec"); 9 //出力を読み取れるようにする 10 p.StartInfo.UseShellExecute = false; 11 p.StartInfo.RedirectStandardOutput = true; 12 p.StartInfo.RedirectStandardInput = false; 13 //ウィンドウを表示しないようにする 14 p.StartInfo.CreateNoWindow = true; 15 //コマンドラインを指定("/c"は実行後閉じるために必要) 16 p.StartInfo.Arguments = @"/c dir \SERVSER\shared"; 17 18 //起動 19 p.Start(); 20 21 //出力を読み取る 22 string results = p.StandardOutput.ReadToEnd(); 23 24 //プロセス終了まで待機する 25 //WaitForExitはReadToEndの後である必要がある 26 //(親プロセス、子プロセスでブロック防止のため) 27 p.WaitForExit(); 28 p.Close(); 29 30 //コマンドラインから情報が取得できなければ処理終了 31 if (results == String.Empty) return; 32 33 //空きドライブ容量文字情報変数 34 String driveInfo = String.Empty; 35 36 System.IO.StringReader rs = new System.IO.StringReader(results); 37 38 //ストリームの末端まで繰り返す 39 while (rs.Peek() > -1) 40 { 41 //一行読み込んで表示する 42 Console.WriteLine(rs.ReadLine()); 43 if (rs.ReadLine().Contains("空き領域") == true) 44 { 45 //空きドライブ容量文字情報を格納 46 driveInfo = rs.ReadLine(); 47 48 //※ここで空きドライブ容量文字情報から、 49 //空きドライブ容量のみ取得して処理を抜ける 50 51 52 break; 53 } 54 } 55 rs.Close(); 56 }
試したこと
http://www.atmarkit.co.jp/ait/articles/0408/14/news017.html
1.こちらのサイトでDIRコマンドで、空き容量の取得が可能だと確認。
↓
https://dobon.net/vb/dotnet/process/standardoutput.html
2.こちらのサイトで、Windowsコマンド実行後の戻り値の取得が可能だと確認。
↓
https://dobon.net/vb/dotnet/string/readline.html
3.こちらのサイトで、取得した文字列情報(改行有)から、行単位で文字列を
取得する方法を確認。
↓
1~3の組み合わせで、
「N個のディレクトリ xx,xxx,xxx,xxx バイトの空き領域」という
空き容量文字情報を取得するところまでは上記のようなコード実装済。
補足情報(FW/ツールのバージョンなど)
環境:VS2015、Win10
※もし、違う方法で、サーバの空き容量が取得可能であれば、ご教示願います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/03 10:44