• ベストアンサー

【VC#】Windowsアプリケーションからコンソール画面への文字列出力

Visual Studio 2005でのC#プログラミングについて教えてください。 Windowsアプリケーションからコンソール(コマンドプロンプト)に文字列を出力するにはどのようなコーディングを行えば良いのでしょうか? 通常、プロジェクトの新規作成の段階で「コンソール アプリケーション」を選択した場合はConsoleクラスのWriteメソッドやWriteLineメソッドを使用すればそのままコンソールの出力されると思います。 しかし、現在は「Windowsアプリケーション」を選択して開発を行っており、その状態からでは上記メソッドを使用しても視覚的には何も起きません。 コンソールに対して文字列を出力しようとしている理由は、現在ログをテキストボックスに表示させているのですが、そのログの量が非常に多く、扱う文字列のが多くなり処理が重くなってしまっているからです。 (textbox.Text = "新たに発生したログ" + textbox.Text; といった形で処理させています。) もし、コンソールに対する文字列出力が困難、または不可能であれば上記のような処理を実現するために適切な方法についてもご教示頂ければ幸いです。 どうぞよろしくお願い致します。

  • shis
  • お礼率54% (28/51)

質問者が選んだベストアンサー

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.5

裏技ではありますが、簡単にコンソールを起動する方法があります。 プロジェクトのプロパティで「出力の種類」をコンソールアプリケーションに設定すれば、フォームと一緒にコンソールも起動します。 そうすれば、Console.WriteLine()でコンソールに出力できます。

shis
質問者

お礼

無事出力させることが出来ました。 ひとまずこの方法で進めます。 ありがとうございました。

その他の回答 (4)

  • isle
  • ベストアンサー率51% (77/150)
回答No.4

System.Diagnostics.Debugとか。

shis
質問者

お礼

MSDNライブラリで調べながら試してみたのですが、うまく使うことが出来ませんでした・・・・ TextWriterTraceListener a = new TextWriterTraceListener.System.Console.Out); Debug.Listeners.Add(a); Debug.WriteLine("test"); Debug.Flush(); としているのですが間違っていますでしょうか?

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・C# から直接 Win32 API は呼べません。  呼ぶためには C# から呼べるインターフェイスを作って下さい。  そうすれば回答者 No.2 さんの回答にあるようにすれば出来ると思います。 ・C# でコンソール・ウインドウの作成、破棄など出来ませんか?  できるようになっていれば Win32 API は使わずにそのメソッド関数を使います。  私の知っている C# の本やサイトでは見つけることが出来ませんでした。 ・以上。参考に。→私もファイルに出力すべきだと思う。

shis
質問者

お礼

ご回答ありがとうございます。 コンソール・ウインドウの作成、破棄をキーワードに調べてみたのですが、私のほうでもやはり見つけることが出来ませんでした。 アドバイス通りファイル出力に切り替えようと思います・・・

回答No.2

C#からWin32APIが使えるのかどうか知らないのですが、 もし使えるのであれば、 CreateFileでコンソールを作成して、WriteFileで文字列を書き込むのが一般的だと思います。

回答No.1

おそらく、ファイルにログを出力するのが簡単で、スピードもさほど低下しないんじゃないでしょうか。 どうしても画面に表示させなければならないのでしたら、DataGridView か何か、表形式タイプのコントロールに出力するとかでしょうか。(ログの量にもよると思いますが。)

shis
質問者

お礼

ご回答ありがとうございます。 ログは画面に表示させる方向で考えております。 これまでは表示させる対象はテキストボックスを中心に考えていましたが、他のコントロールの使用も検討してみたいと思います。

関連するQ&A

  • 文字列の出力で

    はじめまして、vb.netの初心者です。 テキストファイルの作成で下記のようにした場合 FileOpen(1, FileName, OpenMode.Output) Writeline(1,"AAAA")   FileClose(1) "AAAA"と文字列が出力されるところを の""を外して AAAA と出力指定のですが何か良い方法はないでしょうか? よろしくお願い致します。m(_ _)m

  • コンソールアプリケーションについて

    VB.netでコンソールアプリケーションを作成しています。 処理結果をコマンドプロンプトに出力しているのですが、出力するコマンドプロンプト画面をカスタマイズしたいと考えています。  具体的には、背景画面の色を変えたり、出力文字サイズを変えたり、画面サイズを変えたいと思っています。 詳しい方、おしえてください。

  • マウスで選択した文字列を別の文字列に変える

    「TextBox1.Text」というテキストボックスに適当に文字列を入力して、 マウスで ある部分の文字だけを選択して、 その文字を別の文字を置き換える処理を実行するプログラムを作りたいです。 抽象的すぎるかもしれませんが、 どなたか教えていただきたいです。 よろしくお願いします。

  • JavaScript(文字列aとbを連結)

    // [文字列 - 連結1] // ---------------------------------------- // 文字列aとbを連結して出力してください let a = "paiza"; let b = "learning"; console.log(); console.log(a+b);やconsole.log(`a+b`);は違います。文字列aとbを連結する方法は何でしょうか?

  • C++のコンソールアプリケーションと文字コード

    バッチファイルの処理を使って、様々な言語(中国語やキリル文字)や、あまりファイル名としては見られないような(^や%など)記号が含まれるファイルやフォルダについて 検索や、リネーム処理をするバッチファイルを作っていたのですが どうも上記のような、記号を含む文字や、キリル文字を含むフォルダ名ファイル名、また長すぎるパスが存在するとうまく動きません おそらくコマンドプロンプトがShift_JISしか扱えないのと、%に関しては変数の展開が関係していると思うのですが… そこで、この機会にC++のコマンドラインによる実行でそういう例外的な文字列の時も対応してファイル操作ができる プログラムを組みたいと思うのですが 何分無知で申し訳ないのですが C++もコマンドプロンプト上で動く以上、Shift_JISに起因する問題に対処できず、バッチファイルの処理と同じように特殊な文字で 動作が不安定になってしまったりするのでしょうか?教えて下さい Visual Express をインストールして、Windows アプリケーションについて多少調べて、その内部で特殊文字(Shift_JISに出ない文字や記号)の代入と出力 を試してみたところ、うまくいくようなので、もしコンソールアプリケーションで出来ないのであればWindowsアプリケーションの勉強をしようと思っています また、Visual ExpressでC++のプログラムを組む時 コンソールアプリケーションと Windowsアプリケーションを作る時文法が微妙に違うのはどうしてですか? たとえば文字型の変数の宣言に コンソールアプリケーションだと String ○○;ですがWindowsアプリケーションだと^を付けないといけなかったり 同じC++なら文法も同じような気がするのですが? 的外れな質問をしていたらごめんなさい ちなみに、バッチ処理で作ろうと思っていたプログラムは ”ドライブDから、画像ファイル(jpgと仮定)以外のファイル及びフォルダを含まないフォルダ(中に画像ファイルしか含んでいないフォルダ)”を探査して条件に一致する全てのフォルダ(イメージファイルしか入っていないフォルダ)を(D\picturefolder)へ移動、もちろんサブフォルダも含めて全フォルダに関して” というものです、特殊文字の問題以外はクリアできたのですが・・・

  • syslogをコンソールに出力する方法

    syslog.confで出力先を/dev/console(コンソールに出力)に設定したのですが、 logger後、X上のターミナルには何も表示されません。 X上のターミナルはコンソールとは言わないのでしょうか? 上記設定で出力内容を確認するには1~3のrunlevelでないと不可能なのでしょうか?

  • C#のToString("c")

    C#で、テキストボックスに金額を記入し、のちに取り出して数値として使いたいのですが、ToString("c")でフォーマットして記入した場合は通貨記号が取れませんでした。 なぜでしょうか? 何か良い方法がありますでしょうか? よろしくお願いいたします。 //ToString("c")を使わないで記入した場合 textBox1.Text = "-\\12345"; string stTarget; stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-12345 //ToString("c")を使って記入した場合 int tempNum = -12345; textBox1.Text = tempNum.ToString("c"); stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-\12345

  • VBでコンソールアプリの出力を取得したいのですが

    ネット上で入手したコマンドプロンプト上で使うアプリをGUIで操作できるようにしたく出力を取得したいのですが出来ません。 ネットで出力の取得方法を調べて下記のようにしているのですがどうやっても取得できません・・・ (ipconfig や dir 等は問題なく取得できたのですが・・・) VBは2008です Dim p As New Process() p.StartInfo.FileName = "cmd.exe" ' 実行するファイル p.StartInfo.Arguments = "aaa.exe" ' 目的のアプリ p.StartInfo.CreateNoWindow = True ' コンソールを開かない p.StartInfo.UseShellExecute = False ' シェル機能を使用しない p.StartInfo.RedirectStandardOutput = True ' 標準出力をリダイレクト p.Start() ' アプリの実行開始 Dim output As String = p.StandardOutput.ReadToEnd() ' 標準出力の読み取り output = output.Replace(vbCr + vbCrLf, vbLf) ' 改行コードの修正 TextBox1.Text = output ' [出力]ウィンドウに出力 試しに自分で文字を表示するだけのコンソールアプリを作成して試したのですがそれは取得できました。 目的のアプリが特殊なのでしょうか? ソースがあったので見てみたのですがC言語だった為詳しくわからなかったのですが、出力は「Console.WriteLine」ではなく「fputs」を使用して出力していました・・・これが原因なのでしょうか? どうにかして、出力を取得する方法はないものでしょうか? よろしくお願いします。

  • 文字列の数字を計算したい

    初歩的な質問で申し訳ありませんが お願いします。 VB2005EXPRESSで、 文字列の『1』を整数の『1』に、 文字列の『245』を整数の『245』に 変換する関数を教えていただけますか? TextBox2.Text = (TextBox2.Text) + (TextBox1.Text) 1+1が11になります! 一応、ヘルプで調べ 『strtol 文字列を長整数型 (long) に変換します。』 とあったので、 TextBox2.Text = strtol(TextBox2.Text) + strtol(TextBox1.Text) としたら、 名前strtolが宣言されていません。というエラーが出ました。

  • 任意の文字列を取り出すには?

    <fs=12>かきくけこ</fs> <fs=8>さしすせそなにぬねの</fs> TextBox内に上記のような文字列があり、「fs=数値」の数値と「<fs />で括られた文字列」を取り出したい場合は、どういった処理を行えば良いでしょうか?

専門家に質問してみよう