C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: コマンドライン引数 上限値について


(過去ログ 108 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■64292 / inTopicNo.1)  コマンドライン引数 上限値について
  
□投稿者/ Ante (2回)-(2012/11/22(Thu) 09:33:39)

分類:[VB.NET/VB2005 以降] 

皆様

お世話になります。

IDE:VS2010
言語:VB.NET
種別:コンソールアプリケーション

上記環境でコマンドライン引数に設定し、ある処理を行う設計で
プログラムを作成予定なのですが、

コマンドライン引数の上限値はあるのでしょうか。
現在の想定では、引数は4つ考えています。

引数1.最大16桁の文字列 固定
引数2.[1,2,3,…]のようなカンマ区切り 可変
引数3.[1,2,3,…]のようなカンマ区切り 可変
引数4.[1,2,3,…]のようなカンマ区切り 可変

そこで、引数に対する上限値があるのかどうかの確認をしたいと考えています。

例えば、引数2に[1,2,3,…50000]のように入ってきた場合、上限を超えるのかどうか。

よろしくお願いいたします。
引用返信 編集キー/
■64293 / inTopicNo.2)  Re[1]: コマンドライン引数 上限値について
□投稿者/ みきぬ (14回)-(2012/11/22(Thu) 09:58:08)
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processstartinfo.arguments.aspx

ここによれば、
・Vista 以前は長さ 2080 未満
・Windows7 以降は長さ 32699 未満
だそうです。
ただこの長さが文字数なのかいわゆる桁数なのかは、私にはわかりません。

> 例えば、引数2に[1,2,3,…50000]のように入ってきた場合、上限を超えるのかどうか。

というわけで、いずれにせよ無理ですね。
引用返信 編集キー/
■64295 / inTopicNo.3)  Re[2]: コマンドライン引数 上限値について
□投稿者/ howling (88回)-(2012/11/22(Thu) 10:36:10)
そもそも、関数の引数の個数がそれだけ多くなること自体が異常なんじゃないかと思います。
(コマンドライン引数ならどうせ配列で入るしいいかってことなのかもしれませんが)
よくあるのは、配列の開始アドレスとサイズを示す値(個数だったりバイト数だったり)ですよね。
あるいは、クラス化して渡す、なんてこともあるのかなぁと。

どういった状況でそうなったのかいまいち謎ですね。
どうしてもそうしなければならない状況が思いつかないので、考えなくていいのかなと。
引用返信 編集キー/
■64299 / inTopicNo.4)  Re[1]: コマンドライン引数 上限値について
□投稿者/ 魔界の仮面弁士 (92回)-(2012/11/22(Thu) 12:53:39)
No64292 (Ante さん) に返信
> コマンドライン引数の上限値はあるのでしょうか。

呼び出し方法などに依存します。たとえばコマンドプロンプトの場合はこちら。
http://support.microsoft.com/kb/830473/ja

いずれにせよ、極端に長いコマンドラインは避けた方が良いでしょう。

あまり長いようであれば、引数情報を記載したテキストファイルを用意し、
そのファイルへのパスを渡すようにすることを検討してみてください。
C# や VB のコンパイラでいうところの「@ファイル名」パラメーター のように。


なお長さだけでなく、引数に渡す内容が Shift_JIS として処理されるか
Unicode として処理されるのかも、環境に左右されますのでご注意ください。
(Win9x の頃は、引数にバイナリさえも渡せていました)


> 例えば、引数2に[1,2,3,…50000]のように入ってきた場合、上限を超えるのかどうか。
本当に28万文字も指定したいのでしょうか…?

Dim s As String = String.Join(",", Enumerable.Range(1, 50000))
MsgBox(s.Length, vbSystemModal)
引用返信 編集キー/
■64300 / inTopicNo.5)  Re[2]: コマンドライン引数 上限値について
□投稿者/ Ante (3回)-(2012/11/22(Thu) 16:58:55)
2012/11/22(Thu) 16:59:23 編集(投稿者)

みきぬ様

ご返信ありがとうございます。
まさに、ProcessStartInfo.Arguments を使用するためピンポイントの情報でした。
助かりました。

howling 様

ご返信ありがとうございます。
仰る通り、コマンドライン引数として大量の可変長を送り込むのは設計が悪いかもしれません。
真摯に受け止めさせていただきます。

魔界の仮面弁士 様

ご返信ありがとうございます。
呼出方法は、タスクで仕掛けたコンソールアプリケーションが起動し、別コンソールアプリケーションを
ProcessStartInfoで呼び出す形です。

代替案として考えるファイル情報としてのI/Fを参考に今一度考えてみます。
また、引数に入る値を[1,2,3,…50000]のように書きましたが少し極端過ぎました。
実際は[1,2,3,…20]くらいのイメージとなります。

が、可変長であることは変わりないので、検討し直します。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -