C#, C♯, C#相談室 Part50at TECH
C#, C♯, C#相談室 Part50 - 暇つぶし2ch417:412
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/16 01:32:00
つりでした

420:デフォルトの名無しさん
09/01/16 01:35:23
やっぱりそうか・・・

orz

421:412
09/01/16 01:45:35
>>418
!!!
てっきり文字化けと思って深く考えすぎました。。
ありがとうございます。

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

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

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

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


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


424:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/18 02:12:03
Enumを|で連結されてる条件の中に一つの要素(Enum)が入ってるかどうか調べるにはどうすればいいんでしょうか?


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

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

428:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/18 03:14:32
そうだった
そういやそれでバグ出した事あったわ

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

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

432:デフォルトの名無しさん
09/01/18 16:38:05
TreeViewのパスってもしかしてスペース入ってると駄目なんすか?


433:430
09/01/18 16:56:52
MinimumSizeを指定することにより解決しました

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

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

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

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

438:デフォルトの名無しさん
09/01/18 22:22:35
caspolがそうなってるんだもん

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

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

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

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

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

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

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

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

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

446:デフォルトの名無しさん
09/01/19 00:33:21
もう一度デバッグビルドし直せよ・・・

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

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


449:デフォルトの名無しさん
09/01/19 00:40:09
プロジェクトのプロパティでも見てみろよ・・・

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

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

452:デフォルトの名無しさん
09/01/19 00:50:15
ツール→オプション→プロジェクトおよび~→全般→ビルド構成の詳細を表示

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

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

454:435
09/01/19 01:04:00
>>451
すみません、見あたりません。。

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






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

456:デフォルトの名無しさん
09/01/19 01:50:09
できるよ。


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

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

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



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

460:デフォルトの名無しさん
09/01/19 16:39:11
Visual C# 2008 Express Edition の相談もここでよいのでしょうか?


461:デフォルトの名無しさん
09/01/19 16:44:19
それはどうかな

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

463:デフォルトの名無しさん
09/01/19 17:49:10
で、質問はなにかね?

464:デフォルトの名無しさん
09/01/19 18:09:54
460ではないが質問です。

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

465:464
09/01/19 18:12:48
ググったらあっさり見つかったorz
行末に+を書けば良かったのね。

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

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

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

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

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


468:デフォルトの名無しさん
09/01/19 22:29:06
>>466
それだと複数行文字列になる

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

これはどうかと

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

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

471:デフォルトの名無しさん
09/01/19 23:10:55
どうかと、って何だ?当然のことだが…

472:デフォルトの名無しさん
09/01/19 23:11:44
行ごとでなくてもいいな。

473:デフォルトの名無しさん
09/01/20 01:32:52
トライグラフに困って""で切ったり「したっけなw

474:デフォルトの名無しさん
09/01/20 06:48:39
>>468
ならないよ

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

476:デフォルトの名無しさん
09/01/20 22:11:58
用途にもよるんじゃないかな。



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

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

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

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

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

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

479:デフォルトの名無しさん
09/01/21 07:11:57
ぜんぜん違うだろw

480:デフォルトの名無しさん
09/01/21 07:32:57
>>478
お前は何を言っているんだ

481:デフォルトの名無しさん
09/01/21 07:36:30
>>478
前後のつながりがまったくない

482:デフォルトの名無しさん
09/01/21 07:47:54
違うにも甚だしい

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

484:デフォルトの名無しさん
09/01/21 08:48:43
>>478
一行目から間違ってるだろw

485:デフォルトの名無しさん
09/01/21 14:51:15
むしろ生まれてきたこと自体間違い

486:デフォルトの名無しさん
09/01/21 15:50:14
生まれてすみません

487:デフォルトの名無しさん
09/01/21 16:13:51
俺もすいません

488:デフォルトの名無しさん
09/01/21 16:16:51
お父さん、お母さん、生んでくれてありがとう。

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

490:デフォルトの名無しさん
09/01/21 17:00:52
.NETはActivXやCOMの延長線上のものなんだっけか?

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

492:デフォルトの名無しさん
09/01/21 18:36:30
MEFって何よ

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

494:デフォルトの名無しさん
09/01/21 19:18:37
これはうれしいよね


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch