質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

8528閲覧

C#によるサーバ情報の取得(ドライブ容量)について

obaq

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/07/29 13:08

実現したいこと

特定のサーバ上の共有フォルダ(例:\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
※もし、違う方法で、サーバの空き容量が取得可能であれば、ご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

"ディレクトリ"の位置を求めて、それ以前の文字列を削除、
"バイト"の位置を求めてそれ以降の文字列を削除、
そして、残りの文字列からコンマを削除


って、ふつーにドライブの容量/残り容量を取得する、ってので取れそうな気がしますが。

も一つ追記。
その共有フォルダにドライブを割り当てていたら、DriveInfoで取れますね

投稿2018/07/29 13:16

編集2018/07/29 13:37
y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

obaq

2018/08/03 10:44

やっぱり文字列を地味に削ってくしかないんですね(苦笑) ご回答いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問