[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 02/16 13:16 / Filesize : 126 KB / Number-of Response : 495
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part50



1 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 13:45:15 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part49
pc11.2ch.net/test/read.cgi/tech/1224754660/


Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

413 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 23:51:59 ]
パスが通ってないのが通常でしょう

414 名前:412 mailto:sage [2009/01/15(木) 23:55:24 ]
>>413
やっぱりそうですか。
では自分でパス通しときますね。
ありがとうございます。

415 名前:412 mailto:sage [2009/01/16(金) 00:21:14 ]
おかげさまでサービスとしてインストールできたので
早速テスト的にOnStartに以下のコードを書いてサービスを開始しました。
using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write))
using(StreamWriter sw=new StreamWriter(fs))
{
 sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"+"\t OnStart"));
 sw.Flush();
 sw.Close();
 fs.Close();
}
するとログに「2009/01/16 00:22:34 OnS午ar午」という化けた内容で書き込まれたのですが
これってどうしてでしょうか?
あとちょっと別件ですが、上記のコードにファイルオープン時のエラーをcatchするために
try,catchを入れたいのですが、こういうusingを使っている時って
どの行にtry,catchを書くべきでしょうか?


416 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 00:44:28 ]
>>415
ただ単に”OnStart"の場合はどう?

usingはdisposeをfinallyで実行してくれるだけ。

using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write)) {
using(StreamWriter sw=new StreamWriter(fs)) {
try {
// 処理する
}
catch () {
// 例外処理
}
}
}


417 名前:412 mailto:sage [2009/01/16(金) 01:13:44 ]
>>416
返答ありがとうございます。
"OnStart"のみの出力では「OnS午ar午」と出力されてしまいました。

try,catchについて
今回の件ですとファイルオープンのエラーをキャッチしたいので書くとすればこうなりませんか?
少なくともFile.Openはtryブロックの中に書かないといけないと思うのですが。
try {
using(FileStream fs = File.Open(sFile, FileMode.Append, FileAccess.Write)) {
using(StreamWriter sw=new StreamWriter(fs)) {
// 処理する
}
catch ()
{
// 例外処理
}
だとすると今度はusing使ってるからdisposeしてくれるはずですし、
catchの例外処理って大して書くことない?
と思って変に感じました。

418 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 01:29:14 ]
>>415
Console.WriteLine(DateTime.Now.ToString("tt"));
=> "午前"
の1文字目

sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"+"\t OnStart"));
=>
sw.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")+"\t OnStart");

釣りじゃないよね


419 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 01:32:00 ]
つりでした

420 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 01:35:23 ]
やっぱりそうか・・・

orz

421 名前:412 mailto:sage [2009/01/16(金) 01:45:35 ]
>>418
!!!
てっきり文字化けと思って深く考えすぎました。。
ありがとうございます。

>>417のusingの話はどうでしょうか



422 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 02:11:25 ]
>>421
エラーの発生を検出する必要があるため
417の通り、全体を try 〜 catch() で囲む必要はあると思います

using を使う場合はリソースの後処理が不要になるというだけですね
リソースの後処理は一般的に finally 節でおこなうことが多いため、
このfinally 節部分が省略できることになります

ただし、もともとcatch節で書く処理(ログを吐くとかエラーコードを復帰値にいれて返すとか)
は必要でしょう


423 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 02:55:06 ]
フリーのプロファイラを検索するといくつかあるんですが、
お勧めはどれですか?ざっとググった範囲だと
Prof-It for C#
NProfiler
nprof
などが見つかりましたが


424 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 07:06:54 ]
携帯サイトとPCサイトを1つのaspxで対応させたいと思っています。

例えばPHPであれば、
 1.クライアントからの要求に対する処理を行う。
 2.出力データを編集する。
 3.クライアントに応じたテンプレートhtmlを読み込む。
 4.読み込んだテンプレートhtmlに、編集されている出力データを設定。
 5.クライアントへ返す。
と、いった感じでPHP自体には、HTMLのコーディングを一切行わず、
クライアントに応じたテンプレート化されているファイルを読み込み、
可変部分となる出力するデータを埋めていく。

この際、テンプレートをクライアントに合わせたファイルを使用することで、
1つのPHPで、クライアントに応じたHTMLを返すようなことをしていました。

最近、勉強し始めたASP.NETでは、
 「このようなやり方はやらないのかな・・・。」
と、感じました。

通常、1aspxで数種類のhtmlを出力するような場合、どのような方法があるのでしょうか?


425 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:12:03 ]
Enumを|で連結されてる条件の中に一つの要素(Enum)が入ってるかどうか調べるにはどうすればいいんでしょうか?


426 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:30:06 ]
言ってる意味がよくわからんが
if((foo & Enum.Hoge) != 0)
これが知りたいのか?

427 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:34:14 ]
>>426
if((foo & Enum.Hoge) == Enum.Hoge) の方が良くないか?

428 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 03:08:58 ]
良いというか、>>426は間違い
Keysとか、こんなのもあるからな

[Flags]
enum Enum {
  None = 0,
  A = 1,
  B = 2,
  AB = A | B,
}

void Hoge() {
  var e = Enum.A;
  if((e & Enum.AB) != 0) Console.WriteLine("ABだぜ"); // NG
}

429 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 03:14:32 ]
そうだった
そういやそれでバグ出した事あったわ

430 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:38:24 ]
ContextMenuStripに自作コントロール乗せるのが出来ないのですが、どうしたらいいのでしょうか?
msdn.microsoft.com/ja-jp/library/9k5etstz.aspx を参考にしたのですが
標準で提供されているコントロールの場合は表示できるのですが、独自コントロールの場合細い線だけが表示されます

431 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:57:32 ]
何だっけ・・・レイアウト方面も実装しないとサイズが
0 みたいになったような



432 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 16:38:05 ]
TreeViewのパスってもしかしてスペース入ってると駄目なんすか?


433 名前:430 mailto:sage [2009/01/18(日) 16:56:52 ]
MinimumSizeを指定することにより解決しました

434 名前:412 mailto:sage [2009/01/18(日) 18:54:18 ]
>>422
なるほど。
usingを使えばリソースの解放に関しての記述は必要なくなりますが、
おっしゃるとおりエラーが発生したとき他にも処理がありますね。
ありがとうございました。

435 名前:デフォルトの名無しさん [2009/01/18(日) 22:07:38 ]
InstallUtil.exeを使って作成したサービスをインストールしました。
サービスの管理コンソールより開始を選択するとこのエラーが発生しました。
ローカルコンピュータのService1サービスを開始できません。
エラー3:指定したパスが見つかりません。
切り分けたところ実行ファイルがネットワークドライブに配置されていることが問題のようなのですが、
なぜネットワークドライブだと動作しないのでしょうか?
ちょっとスレ違いでしょうか?
動かない理由が.NET Frameworksのセキュリティ上の理由かもしれないと思いましたので
こちらで質問させていただきました。

436 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:09:39 ]
サービスの実行アカウントは? そのアカウントはネットワークドライブへのアクセス権限を持ってる?

437 名前:435 mailto:sage [2009/01/18(日) 22:17:38 ]
アクセス権は問題ないと思います。
テスト的にeveryoneフルコントールを付与しましたが同じでしたので。
そこで.NET Frameworksのセキュリティを疑い出したわけです。

438 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:22:35 ]
caspolがそうなってるんだもん

439 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:23:11 ]
Local System Account は(基本的に)ネットワークリソースにアクセスできない。
つーか、サービスなら普通にローカルコンピュータ上においとけよ。

440 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:25:55 ]
everyoneでもサービスのアカウントがSYSTEMやNETWORKだったら駄目だぞい。
あとは.NETのバージョンだな。3.5SP1か3.0SP2か2.0SP2なら、
ローカルイントラゾーンに限り起動できる。

441 名前:435 mailto:sage [2009/01/18(日) 22:37:30 ]
>>439
もちろんそうなのですが、VSの作業ファイルがネットワークドライブに配置されていますので。
>>440
>>ローカルイントラゾーンに限り起動できる。
こちらは.NET Frameworksのセキュリティ設定でなんとかなりそうです。
>>everyoneでもサービスのアカウントがSYSTEMやNETWORKだったら駄目だぞい
これ知りませんでした。
eveyoneってほんとに何でもと思ってました。
これが原因っぽいですね。

解決できてうれしいです。
今回はビルド後のコマンドでローカルにコピーすることにします。
ありがとうございました。



442 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:48:13 ]
シンボリックリンクでローカルディスクにあるように見せかければ
ネットワーク上にあっても大丈夫だったりする

443 名前:435 [2009/01/19(月) 00:14:14 ]
>>442
シンボリックリンクってWindowsでいうところのショートカットですよね?
ショートカットをサービスに登録ってできましたっけ?

ここで質問させてもらいながらWindowsサービス作ってるのですが、
デバッグできなくて困っています。
ビルド→InstallUtil.exeでサービスを実行→サービスコンソールからサービスの開始
→VS2005からアタッチするとよい、ということがヘルプに書いているのですが、
どうもブレークポイントで止まりません。
自分の予想ではサービスに登録した実行ファイルが「\bin\Release」に作成されたもの、
つまりリリースビルドであることが原因と思っています。
デバッグビルドで実行ファイルを作成するにはどうすればよいでしょうか?
「\bin\Debug」に作成されるのかと思ったのですが、アセンブリ名.vshost.exeというファイルがあるだけで見つかりません。

444 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:19:21 ]
>>443
442が言っているのは、Vistaで搭載された本物のシンボリックリンクだと思う。

445 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:20:58 ]
シンボリックリンクってVistaの新機能じゃなくてNTFSの機能だったと思ったけど。。

446 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:33:21 ]
もう一度デバッグビルドし直せよ・・・

447 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:35:56 ]
>>445
VistaのNTFSドライバではじめてシンボリックリンクを解釈するようになった、と言えばいいか。

448 名前:435 mailto:sage [2009/01/19(月) 00:38:29 ]
>>446
デバッグビルドってどうやるんでしょうか?(汗
昔はツールバーらへんで都度切り替えてビルドしていた記憶があるのですが、
今使ってるVS2005ではなくなっているみたいなのですが。。
おかしいな、とは思ったのですが今回のように作成物がサービスでなければ
F5キーでブレークポイントで止めれましたし、ビルド内容を変更するようなところも見あたらなかったので
特に意識していなかったのですが。。


449 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:40:09 ]
プロジェクトのプロパティでも見てみろよ・・・

450 名前:435 mailto:sage [2009/01/19(月) 00:46:31 ]
>>449
やっぱりそこですよね。
一番に見たのですがどれかわかりません。。
しいて言うなら「アンマネージドコードデバッグを有効にする」
というのがありますが、アンマネージド、なので関係ないように見えますし。。
低レベルな話で申し訳ないです。

451 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:49:19 ]
プロジェクトのプロパティ、[ビルド]-[構成]



452 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:50:15 ]
ツール→オプション→プロジェクトおよび〜→全般→ビルド構成の詳細を表示

453 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 00:56:32 ]
>>450
あと、やっぱりツールバーにビルド構成のドロップダウンを追加しておいた方がいいよ。

これ2005からデフォではツールバーに表示されなくなったのが個人的には
大いに謎なんだけど。

454 名前:435 mailto:sage [2009/01/19(月) 01:04:00 ]
>>451
すみません、見あたりません。。

>>452
おおお!!
これです!
ビルド構成の詳細を表示、にチェック入れたら
メニュー「ビルド」配下に「構成マネージャー」が表示されるようになり、
ここで切り替えることができました。
これを使うとブレークポイントで止めることができました。
今まで知りませんでした。
ありがとうございます。
しかし、構成マネージャーってオプションでチェック入れないと表示されないんですね。
すごく重要に思えるんですが。
しかし構成マネージャーの規定値がReleaseビルドなので
今までずっとReleaseビルドしてたはずなのですが、
なんで今までサービスアプリケーション作成以外の場合この設定でブレークポイントで止めれてたのでしょうか?






455 名前:435 mailto:sage [2009/01/19(月) 01:07:45 ]
>>453
すみません、書き込み時の時差で見逃しました。
同意です。
昔ツールバーに表示されてましたよね。
あれ?
今ツールバーに追加しようとしたのですが、
選択項目にないのでVS2005では追加できなくないですか?

456 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 01:50:09 ]
できるよ。


457 名前:435 mailto:sage [2009/01/19(月) 02:17:32 ]
>>456
あれ、ほんとですか
ツールバー右クリック→ユーザー設定
→ツールバータブ
の中にそれっぽいのはないので、ここではないですよね?

458 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 04:29:40 ]
Directory.GetDirectoriesでとったディレクトリをForeachしてるんですが、
なぜかExistsがFalseになるフォルダがあります。

最後尾にスペース入ってるそうなるようなんですが、防止する方法ってあるんでしょうか?



459 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 10:54:37 ]
バグっぽい仕様みたいだね。
ディレクトリなら末尾に \ を付加してやるといいみたい

460 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 16:39:11 ]
Visual C# 2008 Express Edition の相談もここでよいのでしょうか?


461 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 16:44:19 ]
それはどうかな



462 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 16:46:38 ]
IDE自体の問題ならVSスレが立ってたはずだが
IDEで作成してるものの質問ならここかもな

463 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:49:10 ]
で、質問はなにかね?

464 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 18:09:54 ]
460ではないが質問です。

C#で1つの長い文字列を複数行に分けて書くのってどうしたらいいんでしょう?
C++なら行ごとに""で囲めば、その外で改行していようが1つの文字列になるけど、
同じことをC#でやったら怒られました。

465 名前:464 mailto:sage [2009/01/19(月) 18:12:48 ]
ググったらあっさり見つかったorz
行末に+を書けば良かったのね。

466 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:53:00 ]
>>465
string s = @"こんなことも
かけちゃうの
しってる
かい?";

467 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:57:29 ]
それとついでだ、これも覚えとけ。
@"" だと改行無視、\エスケープなしな全部
入るヒアドキュメントな感じになる。

string hoge = @"1 行目
2 行目";

string path = @"C:\Program Files\Hoge\hoge.exe";

string foo = @"ダブルクオート「""」はこのように。";


468 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 22:29:06 ]
>>466
それだと複数行文字列になる

469 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 22:30:47 ]
>C++なら行ごとに""で囲めば、その外で改行していようが1つの文字列になる

これはどうかと

470 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 23:09:25 ]
Cには文字列の+演算子なんて無いから "abc" + "def" と書けなくて
文字列リテラルの連結は "abc" "def" みたいに書くからね。

C#にもその書き方を残しても良かったと思うが、+演算子を強要した方が
意図が明確でいいか。

471 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 23:10:55 ]
どうかと、って何だ?当然のことだが…



472 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 23:11:44 ]
行ごとでなくてもいいな。

473 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 01:32:52 ]
トライグラフに困って""で切ったり「したっけなw

474 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 06:48:39 ]
>>468
ならないよ

475 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 10:48:42 ]
>>467
> string hoge = @"1 行目
> 2 行目";
これだと「目」と「2」の間にある改行文字もhogeに含まれるから
>>464のニーズには応えられないんじゃない?

476 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 22:11:58 ]
用途にもよるんじゃないかな。



477 名前:デフォルトの名無しさん [2009/01/21(水) 01:55:36 ]
次のコードの意味がわからなくて悩んでいます。
1:EventLogPermission e = new EventLogPermission(PermissionState.Unrestricted);
2:e.PermitOnly();

ヘルプにかかれていることを自分的に以下のように解釈しました。

1で後で利用するセキュリティ制御のためのインスタンスを作成します。
2で規定のアクセス権のコンストラクタの引数で指定されたもののみでしか
アクセスできないように縛りをかけます。
今回のケースでは「PermissionState.Unrestricted」が指定されているので
.NET Frameworksのセキュリティ設定でフルアクセスの場合、
さらにフルアクセスの縛りを追加する形になり、結局セキュリティレベルは変わらない、と解釈しました。

ですがこのコードの後にイベントのアイテムを読み取るコードを書くと
アクセス許可でエラーが発生してしまいます。

意図した結果と違うので自分が勘違いしていると思うのですが
どの辺がおかしいでしょうか。

478 名前:デフォルトの名無しさん [2009/01/21(水) 02:49:00 ]
C#が.NET Frameworkでなければならない理由って何なの?
むしろBorlandDelphiVCLみたいな感じのほうがよかったんじゃないの?
Linux版の.NET Frameworkが普及すればLinuxの利用者が増えて
Windowsの売り上げが下がるよね。
おそらくWindowsはカーネルごと新しくなることが
あるからそれを意識してるんだと思う。
つまりXPとVistaをMacやLinuxと同じように
まったく別のOSと捉えているってことだよね。
正解でしょ?

479 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:11:57 ]
ぜんぜん違うだろw

480 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:32:57 ]
>>478
お前は何を言っているんだ

481 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:36:30 ]
>>478
前後のつながりがまったくない



482 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 07:47:54 ]
違うにも甚だしい

483 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 08:36:25 ]
>>477
その考えであってると思うけど、別に原因があるのでは。
再現性のあるコードアップしてくれたら調べるよ。

484 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 08:48:43 ]
>>478
一行目から間違ってるだろw

485 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 14:51:15 ]
むしろ生まれてきたこと自体間違い

486 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 15:50:14 ]
生まれてすみません

487 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 16:13:51 ]
俺もすいません

488 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 16:16:51 ]
お父さん、お母さん、生んでくれてありがとう。

489 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 16:55:17 ]
>>478
> カーネルごと新しくなること
それは結構当たっていると思う。
ただし、XPとVistaではなく、x86とx64とIA-64とMobile/CE系各種のようなアーキテクチャの違い。

490 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 17:00:52 ]
.NETはActivXやCOMの延長線上のものなんだっけか?

491 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 17:32:12 ]
VS2010のMEF標準搭載で、やっとCOMが.NETで置き換わりそうな雰囲気になってきたな



492 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 18:36:30 ]
MEFって何よ

493 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 19:00:56 ]
Managed Extensibility Framework
マネージコードでプラグイン書けるようにするための新しい.NETのライブラリ
VS2010にも使用される

494 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 19:18:37 ]
これはうれしいよね






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<126KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef