ふらっとC#,C♯,C#( ..
511:デフォルトの名無しさん
09/02/15 17:27:35
ファイル一覧のソートについて質問があります。
ファイルの一覧を、アクセスタイムの新しいものから順番にソートして配列に入れたいです。
アクセスタイムを得るには、
File.GetLastAccessTime(file);
で、ファイル名を得るには、
string[] files = Directory.GetFiles(@"C:\temp", "*.txt");
です。
目的のファイルの一覧を、アクセスタイムの新しいものから順番にソートして配列に入れるには、どうしたらよいでしょう?
うまくふたつをつなげられないで困っています。
ご指導お願いします。
512:デフォルトの名無しさん
09/02/15 17:29:42
配列に入れてからソートすれば良いのでは無いでしょうか?
513:デフォルトの名無しさん
09/02/15 17:33:26
OS のスリープ殺す、なんてのは特殊だと思うけどな。
514:デフォルトの名無しさん
09/02/15 17:45:22
>>511
LINQ使えば簡単。
Directory.GetFiles(@"C:\temp", "*.txt").OrderBy(file => File.GetLastAccessTime(file)).ToArray();
515:490
09/02/15 18:08:11
ボクのはまだですかwktk
516:デフォルトの名無しさん
09/02/15 18:11:09
>>515
その話題は >>505 で終了しました。またのお越しをお待ちしております。
517:デフォルトの名無しさん
09/02/15 18:11:54
今日中がいいので、それは無理・・・
だれかおねがいします><
518:デフォルトの名無しさん
09/02/15 18:13:16
>>514
それだと、古い順に並んでしまうだろう。
OrderByの代わりにOrderByDescendingを使わないと。
519:デフォルトの名無しさん
09/02/15 18:17:38
>>514
おお、ありがとうございます。
なにか方法がありそうと思っていましたが、スマートです。
早速試してみました。
string[] files = Directory.GetFiles(@"C:\temp", "*.txt").OrderBy(file => File.GetLastAccessTime(file)).ToArray();
foreach (string file in files)
{list = list + file + "\r\n";}
MessageBox.Show(list);
なんかこれだと、まだabc順になっているようです。
なにか方法が違ってますか?
520:デフォルトの名無しさん
09/02/15 18:36:52
失礼。ごめんなさい。できました。
>>518
おっしゃるとおり、OrderByDescendingでできました。
大感謝です。
521:デフォルトの名無しさん
09/02/15 19:02:02
OrderByとOrderByDescendingの違いは正順、逆順だけなんだけど、アルファベット順になる理由はなんだったの?
522:デフォルトの名無しさん
09/02/15 19:25:19
今ぼくの進めてくれてらっしゃる方いますか
523:デフォルトの名無しさん
09/02/15 19:26:25
>>522
>>474 ですか?
524:デフォルトの名無しさん
09/02/15 19:29:05
>>474 は、イベントソースの一覧を取得する方法はなさげなので、
SourceExists() でやってるように、レジストリから取ってくるしかないのでは?
525:デフォルトの名無しさん
09/02/15 19:56:22
>>523
>>490です
526:デフォルトの名無しさん
09/02/15 19:59:01
>>525
それは終了らしいので、途中まで調べましたが止めておきます。
527:デフォルトの名無しさん
09/02/15 20:04:50
>>526
ではここに再開を宣言します。
どうぞよろしくお願いします
528:デフォルトの名無しさん
09/02/15 20:06:13
iイ彡 _=三三三f ヽ
!イ 彡彡´_ -_=={ 二三三ニニニニヽ
fイ 彡彡ィ 彡イ/ ィ_‐- 、  ̄ ̄ ヽ し ま
f彡イ彡彡ィ/ f _ ̄ ヾユ fヱ‐ォ て る
f/ミヽ======<|-'いシ lr=〈fラ/ !フ い で
イイレ、´彡f ヽ 二 _rソ 弋_ { .リ な 成
fノ /) 彡! ィ ノ ̄l .い 長
トヾ__ら 'イf u /_ヽ,,テtt,仏 ! :
|l|ヽ ー '/ rfイf〃イ川トリ / .:
r!lト、{'ー‐ ヽ ´ ヾミ、 / :
/ \ゞ ヽ ヽ ヽ /
./ \ \ ヽ /
/〈 \ ノ
-‐ ´ ヽ ヽ \\ \ 人
529:デフォルトの名無しさん
09/02/15 20:08:04
ほんとに今日だけはお願いしますOTZ
530:デフォルトの名無しさん
09/02/15 20:10:19
なんのためにそれが必要なのか、わかりやすく説明してみれ。
531:デフォルトの名無しさん
09/02/15 20:34:21
>>490のは、何に躓いたのかさっぱり分からないけど、普通にできたよ。
もちろん差し上げてもいいんだけど、
| このソフトはフリーソフトウェアです。
| 配布、転載は原則自由です。
| ただし、中身の一部もしくは全部を改変して配布、掲載をする事は禁止します。
って書いてあるので、作者の許諾を明示的に取ってきてください。
つーか、なぜ作者にくれと言わないのか?
532:デフォルトの名無しさん
09/02/15 20:38:52
>>506で作者が登場している!ちょうど良いぞ!w
533:デフォルトの名無しさん
09/02/15 20:46:39
最近仕事でC#を使うことになりました。
Webの開発です。
皆さんに聞きたいのですが、匿名メソッドというのは
どういうケースで使いますか?
URLリンク(www.atmarkit.co.jp)
↑@ITで匿名メソッドについて載っていますが、どういうものかは理解できました。
しかしこれってWebアプリの開発とかでどういうケースで使うのかなと。。
使用ケースが分かっていません。
あまり使うことが無いものなのでしょうか?
534:デフォルトの名無しさん
09/02/15 20:50:36
また、2ちゃんねるで宿題頼んでる奴がいるのかw
535:デフォルトの名無しさん
09/02/15 20:51:42
イベントハンドラーに適当なテスト用のメソッド入れたいときとか、
LINQ でとか。
536:デフォルトの名無しさん
09/02/15 21:07:21
最近仕事でC#使うことになったが、匿名メソッドやラムダ式は使いたい気持ちをぐっとこらえてる
ほかの人が見たときに読みづらいだろうからな
537:デフォルトの名無しさん
09/02/15 21:33:52
>>531
エラー出ましたよね?直したとこ教えてくだされば><
それだけでいいんです
538:デフォルトの名無しさん
09/02/15 21:35:31
どこでどういうエラーが出たか書けよ
539:デフォルトの名無しさん
09/02/15 21:41:33
とにかく、処理内容を指定して渡すという状況でのみ使用すべきで、メソッドに名前を付けて
定義する必要がなくなるズボラ推奨機能という考え方はすべきでない。具体的には、LINQと、
処理の流れの文脈的にそこに直書きされるべきコールバックとか。
LINQが一番重要。
例:
int a[]=new int[]{3,7,2,4,8,1,9};
int b=a.First(i=>i<3);
みたいな。これは匿名メソッドをラムダ式で書いているけれど、
int b=a.First(delegate(int i){return i<3});
も可。でも、LINQなら上の書き方に慣れるべき。iに対して型推論が効くからね。
後者は例えば、UIと別スレッドのメソッド中でUIスレッドで実行されるべき処理をInvokeに
渡す場合とか。あと、WaitHandle使って非同期でコールバックが呼ばれる処理を同期処理に
する場合にコーディング上も同期処理の如く書く事ができて見易い。こういった場合、
その記事に書いてある、ローカル変数に匿名メソッド内からアクセスできるというのは超重要な
ポイントになる。
最後に、UIのイベントハンドラをコードで追加する時、超短いコードの場合は
ズボラに匿名メソッドを使ったりするけれど、これは悪い例であまりやるべきではない。
例:this.Button1.CLICK+=delegate{MessageBox.Show("Clicked!!")};
540:デフォルトの名無しさん
09/02/15 21:42:10
自己解決しますた。
簡単じゃねーかよ、こんぐらいさっさと説明しやがれバカども
541:デフォルトの名無しさん
09/02/15 21:44:44
警告 1 デザイナは 247 行のコードを処理できません。
base.FormBorderStyle = FormBorderStyle.FixedDialog;
メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。
変更を削除して、デザイナを再度開いてください。 C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 248 0
警告 2 デザイナは 113 行のコードを処理できません。
base.FormBorderStyle = FormBorderStyle.FixedDialog;
メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。変更を削除して、デザイナを再度開いてください。
C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormOption.cs 114 0
エラー 3 型または名前空間名 'WsLib' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 10 11 AlarmTimer
警告 4 この参照を解決できませんでした。アセンブリ "WsLib" が見つかりませんでした。アセンブリが間違いなくディスクに存在することを確認してください。
コードにこの参照が必要な場合、コンパイル エラーが発生する可能性があります。 AlarmTimer
警告 5 参照コンポーネント 'WsLib' が見つかりませんでした。
この5つっす
542:デフォルトの名無しさん
09/02/15 21:56:22
で、>>530 への回答は?
543:デフォルトの名無しさん
09/02/15 21:56:58
簡単だ。エラー3をよく読め。そして考えろ。
544:デフォルトの名無しさん
09/02/15 21:58:06
お前ら頭悪いよな
545:デフォルトの名無しさん
09/02/15 22:03:40
>>543
不足してるらしいです、でも意味わかりません
546:デフォルトの名無しさん
09/02/15 22:04:51
カワイソス(´・ω・)
547:デフォルトの名無しさん
09/02/15 22:07:57
頭が不足してるのか、かわいそうに
548:デフォルトの名無しさん
09/02/15 22:09:59
>>545
意味がわからなかったらググったりして調べればいいじゃないか
549:デフォルトの名無しさん
09/02/15 22:11:50
それがめんどくせーから聞いてるんだろうが! バカジャネーノ
550:デフォルトの名無しさん
09/02/15 22:18:13
dllがないってことかな
551:デフォルトの名無しさん
09/02/15 22:18:48
面白いからもっとやれwww
552:デフォルトの名無しさん
09/02/15 22:26:11
できました! ありがとうございました。
これで明日の課題提出に間に合います!
553:デフォルトの名無しさん
09/02/15 22:33:36
ソース盗用がバレて遡及的に単位取り消し/停学ですね、わかります
554:デフォルトの名無しさん
09/02/15 22:35:58
自分のおべんきょ用です
555:デフォルトの名無しさん
09/02/15 22:54:12
C#って初心者向けの言語ですか?
556:デフォルトの名無しさん
09/02/15 22:55:41
>>555
向け、かはわからないけど、初心者でも十分理解できると思います。
557:デフォルトの名無しさん
09/02/15 23:00:27
向けかといわれると確かにまぁ違うよな
向いているかといわれると大丈夫なんじゃないぐらいではある
558:デフォルトの名無しさん
09/02/15 23:01:13
実際に初心者が使えるかどうかはともかく,言語のスタンスとしては初心者向けではないな
どっちかというと既に他のが使える人が便利に使える言語というコンセプト
559:デフォルトの名無しさん
09/02/15 23:06:56
C#のstringには、MFCのCString::Right(n)のように、
末尾からのn文字を抽出するメソッドはないのでしょうか。
ない場合、全体の文字数を取得して、全文字数とnを使って、Substringするという回りくどいやり方しかないのでしょうか。
560:デフォルトの名無しさん
09/02/15 23:11:16
ない
回りくどいって言ってもstr.Substring(str.Length - n)とするだけのことだろ
561:デフォルトの名無しさん
09/02/15 23:11:40
ない
どうしても嫌なら拡張メソッド作ったら
562:559
09/02/15 23:15:36
ありがとう。
回りくどいとけなすつもりはなかった。
今は反省している
563:デフォルトの名無しさん
09/02/15 23:30:44
どうしても欲しければMicrosoft.VisualBasic.Strings.Right……。
564:デフォルトの名無しさん
09/02/15 23:33:59
C#のstringはLengthを取得するのにコストがかかるわけじゃないのでSubstringでの切り出しでいいんだよ。
565:デフォルトの名無しさん
09/02/16 01:21:10
Substringは範囲外の切り出しでエラーになる。
これを使いにくいと思ったことはあるな。
"abcde".Substring(3, 10) で "de"
"abcde".Substring(8, 2) で "" が欲しいケースは多いよ。
566:デフォルトの名無しさん
09/02/16 01:33:31
まぁはじめは実際なんでないんだろうなぁとは思った。
たぶん忘れたかなんか事情があったんだろうなと思って
おくことにした
Substring は境界絡んでくるとうざいんだよなー
567:デフォルトの名無しさん
09/02/16 01:38:13
>>565
2つ目の引数は文字数なのに結果の文字列に含まれる文字数がそれ以下だとおかしいだろ。
568:デフォルトの名無しさん
09/02/16 01:49:36
拡張メソッドが便利だな
public static string Subst(this string str, int start, int length) {
if (str == null) return null;
if (start < 0) { length -= start; start = 0; }
if (start >= str.Length) return "";
if (str.Length < length + start) length = str.Length - start;
return str.Substring(start, length);
}
public static string Subst(this string str, int start) {
if (str == null) return null;
if (start < 0) start = 0;
if (start >= str.Length) return "";
return str.Substring(start);
}
569:デフォルトの名無しさん
09/02/16 15:38:09
イベントの質問です。
windowsフォームなどのボタンなどを付けて、ダブルクリックした場合、
イベントを自動生成して、 Windows フォーム デザイナで生成されたコードの中に
イベントを登録したり、処理(ハンドラ?)のプログラムを書く場所を作ってくれますが、
イベントの引数やインスタンスの定義はどこでしてくれてるのですか?
570:デフォルトの名無しさん
09/02/16 15:43:12
***.Designer.cs
***はフォーム名
571:デフォルトの名無しさん
09/02/16 19:07:05
@IT .Net Tipsの
リストビューに画像をサムネイルで表示するサンプルを使おうとしています。
URL (URLリンク(www.atmarkit.co.jp))
Formに直接リストビューを貼り付ければ、希望通りの動きをしました。
が、FormにTabControlを張り付けて、TabPageの2ページ目以降にリストビューを貼ると、
タブをクリックしてTabPageを表示しようとするとエラーが発生してフォームが終了し、
Program.csのApplication.Run(new Form1());でブレークしてしまいます。
エラーの内容は、
System.ArgumentException: 使用されたパラメータが有効ではありません。
場所 System.Drawing.Image.get_Width()
場所 System.Drawing.Image.get_Size()
場所 System.Windows.Forms.ImageList.CreateBitmap(Original original, Boolean& ownsBitmap)
場所 System.Windows.Forms.ImageList.CreateHandle()
(以下略)
です。
タブページの1ページ目や、Formに直接だと表示されるしエラーもでないんですが、
これは何が原因なんでしょうか?
572:デフォルトの名無しさん
09/02/16 20:26:07
イベントハンドラの for の最後の
> thumbnail.Dispose();
これかな。消してみな。
573:571
09/02/16 20:49:54
>>572
ずばりでした! 動きました!
ありがとう。
ちょっとソース詳しく読んで、なぜだか考えてみます。
574:あ
09/02/16 21:00:20
あ
575:デフォルトの名無しさん
09/02/16 21:05:46
>>573
これ読みながらやるような初心者にはわからん可能性が高い気がするけど
ヒントだけ。
ようするにTabPage2 に移動したことによってこのイベントが呼ばれる段階で
ハンドルが作られていない(可能性がある)のが問題。
その状況だと初期化が遅延されちゃうみたいだな。んで、表示されたときに
初期化が始まって、そのときに追加された Bitmap を参照しようとするけど
すでに破棄済みだからアウトになる、と。
576:デフォルトの名無しさん
09/02/16 21:41:34
もっと単純に言えば、使い終わっていないものをDisposeしちゃダメってことだ。
577:デフォルトの名無しさん
09/02/17 07:52:38
もっと単純に言えばDisposeは使うなってことだ
578:デフォルトの名無しさん
09/02/17 07:53:43
それ、違うから。
579:デフォルトの名無しさん
09/02/17 08:07:41
おいおい
580:デフォルトの名無しさん
09/02/17 13:31:01
HTTPのHEADメソッドを送信するにはどうすればいいでしょうか?
WebClientにもWebRequestクラスにもそれらしいメソッドはありませんでした。
もしかしてSocketクラス使わないとだめでつか?
581:デフォルトの名無しさん
09/02/17 13:39:14
HttpWebRequest.Methodプロパティ?
582:デフォルトの名無しさん
09/02/17 14:06:14
複数のフォルダに写真を整理していて、そのなかにある特定の日付(たとえば3月)の写真だけを抜き出したいと思っています。
string[] files = Directory.Getfiles("c:/photo", "*.jpg", SearchOption.AllDirectories);
string list = "";
foreach(string file in files) {list = list + file + "\r\n";}
MessageBox.Show(list);
とやって、いま、次のようなリストを入手しました。
このうち3月のみを取り出すのはどうしたらよいでしょう。
いちばん簡単なのは、*の部分に書くことかと思い、
string[] files = Directory.Getfiles("c:/photo", "200803*.jpg", SearchOption.AllDirectories);
としてみましたが、フォルダ名とファイル名にわかれていて結果は空になってしまいます。
あと、3月以前(01、02)とする方法もあわせて教えてください。
c:/photo/20080407eventname/photo.jpg
c:/photo/20080401eventname/photo.jpg
c:/photo/20080317eventname/photo.jpg
c:/photo/20080310eventname/photo.jpg
c:/photo/20080304eventname/photo.jpg
c:/photo/20080303eventname/photo.jpg
c:/photo/20080224eventname/photo.jpg
c:/photo/20080203eventname/photo.jpg
c:/photo/20080127eventname/photo.jpg
583:デフォルトの名無しさん
09/02/17 14:38:22
>>581
これでいけました。ありがとうございました
String url = "URLリンク(pc11.2ch.net)";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);
584:デフォルトの名無しさん
09/02/17 15:05:13
>>582
パス名の文字列を正規表現で分解して年と月を別々に取り出す
あとは大小比較で絞込み
Regex r;
r = new Regex(@"(\d{4})(\d{2})\d{2}eventname", RegexOptions.IgnoreCase);
Match m;
m = r.Match(@"c:/photo/20080407eventname/photo.jpg");
if (m.Success) {
String year = m.Groups[1].Value;
String month = m.Groups[2].Value;
Console.WriteLine("{0}年{1}月", year, month);
}
585:デフォルトの名無しさん
09/02/17 15:25:58
ファイル名の禁則文字を制御したいと思っています
やりたいことは「\/:*?"<>|」の文字があったら「""」で置き換えることです
Strings.Replaceでひとつひとつチェックすることぐらいしか思いつかないのですが
もう少しスマートな処理方法があれば教えて下さい
586:デフォルトの名無しさん
09/02/17 15:34:22
C# 2.0でDouble型のデータを文字列に変換するときの質問です。
通常
double a = 1.1;
a.ToString();
//結果="1.1"
のようになるのですが
以下の場合の解決を行いたいです。
double b = 0.000097;
b.ToString();
//結果="9.7E-05" 期待したい結果は "0.000097"
この結果を通常の10進数の表記を行いたいのですが
ToStringメソッドの引数に
"0.0000000"や "0.#############"
などを渡せば期待しているとおりの文字列を受け取ることができます。
しかし、小数点以下の部分が何桁になるかわからない場合、この表記であれば文字数を超えた部分が無効になると思います。
(例えば b.ToString("0.000")は"0.000"になる)
0.##...#を最大桁数分用意すればいいのかもしれませんが・・・・
何か綺麗な方法というのはないのでしょうか?
587:デフォルトの名無しさん
09/02/17 15:38:41
decimalにキャストするとか。
588:デフォルトの名無しさん
09/02/17 15:40:41
>>585
String.Replaceでなく、Regex.Replaceを使えば一度に変換できる
589:デフォルトの名無しさん
09/02/17 15:42:28
>>586
string.Format
590:デフォルトの名無しさん
09/02/17 15:43:33
>>588
調べてみます。ありがとうございましたー
591:586
09/02/17 15:58:27
レスサンクスです。
>>587
最悪その方法もありかなと考えているのですが・・・
>>589
型式指定子などヘルプ参考に使って試してみたんですが・・・
うまいこと行きませんでした…orz
型式指定子の横に数値をつければうまくはいくのですが、その横の数値に当たる部分が動的なため決められないのです。
(といっても結局Doubleの上限下限までではありますが・・・)
592:デフォルトの名無しさん
09/02/17 16:31:12
string型の変数で絶対パスを指定してプログラムで背景を変えたいのですが、どのように記述すればよいでしょうか?
参考ページが見つからず困っています。
593:デフォルトの名無しさん
09/02/17 16:32:39
>>592
背景って何だ?
594:デフォルトの名無しさん
09/02/17 16:40:23
BackGroundImageの事とかじゃね?
Formの背景とか??
595:デフォルトの名無しさん
09/02/17 16:41:03
datTable.Columns.Add("dat1", GetType(Int32));
のGetType(Int32)の箇所でコンパイルエラー('int' は '型' ですが、
'変数' のように使用されています)が出てしまいます。
構文が間違ってるでしょうか?
すみませんが、ご教授ください。
596:デフォルトの名無しさん
09/02/17 16:41:09
>>593
BackgroundImageのことです。
普段はフォームのほうでフォルダを指定して画像を指定していたのですが、
月ごとに画像を自動で変えるためプログラム内で処理しようかと思いまして。
597:デフォルトの名無しさん
09/02/17 16:43:47
>>596
BackgroundImage = new Bitmap(xxx);
598:デフォルトの名無しさん
09/02/17 16:48:15
string[] data= new string[12];
for (int i=0;i<12;i++)
{
string[i] = string.format("C:\Image\{0}.jpg", i.ToString() );
}
LOADトカの処理で
int index = DateTime.Now.Month - 1;
Hoge.BackgroundImage = Image.FromFile( data[index] );
こんなイメージなの・・・か?
599:デフォルトの名無しさん
09/02/17 16:49:38
全部ロードする必要なくないw
600:デフォルトの名無しさん
09/02/17 16:50:43
>>595
その場合、""でくくるかtypeof使うんじゃないの?
601:デフォルトの名無しさん
09/02/17 16:53:50
>>599
い・・・いらないねw orz
602:592
09/02/17 16:58:25
>>597さんのソースで無事表示できました。
皆さんありがとうございます。
603:デフォルトの名無しさん
09/02/17 17:01:07
>>600
レスどうも。
たしかに、Type.GetType("System.Int32")と書くとうまく行くんですが、
URLリンク(www.atmarkit.co.jp)
このページで、GetType演算子(URLリンク(msdn.microsoft.com)(VS.80).aspx)
を使う方がよいとあったのもので。書式はあってると思うんですが。
604:デフォルトの名無しさん
09/02/17 17:06:08
>>603
お前は何を言っているんだ・・・
605:デフォルトの名無しさん
09/02/17 17:07:58
それはVBの話で、C#での対応する演算子はtypofです。
Type.GetType(ほにゃらら)ってメソッドの書式でしょ?
あるいは、Int32.GetType()でも可、かな?
606:デフォルトの名無しさん
09/02/17 17:10:19
>C#での対応する演算子はtypofです。
typoだな
607:デフォルトの名無しさん
09/02/17 17:10:38
('A`)ワロス
608:デフォルトの名無しさん
09/02/17 17:12:03
>>604
すみませんw
Type.GetTypeメソッドとGetType演算子は別物ですよね。
んで、前者を使って文字列で型を指定するとうまく行くのですが、
後者をGetType(Int32)のように書いてもうまく行かなかった。という状況です。
ちなみに、>>600さんのご指摘通り、typeof(int)でうまくいきました。
ありがとうございました。
609:デフォルトの名無しさん
09/02/17 17:14:03
>>605
('A`)
VBでしたね。すいません。ありがとう。
610:605
09/02/17 17:22:58
まさにtypoだな。って何で俺が落ちをつけにゃならん。
611:デフォルトの名無しさん
09/02/17 17:25:02
>>584
早速ありがとうございます。
c:/photo/20080317eventname/photo.jpg
c:/photo/20080310eventname/photo.jpg
c:/photo/20080304eventname/photo.jpg
c:/photo/20080303eventname/photo.jpg
の行を抜き出したいのです。
そのためには、どう絞り込めばよいでしょう?
612:デフォルトの名無しさん
09/02/17 17:27:18
めんどくせえ
Regex.Match(path,"200803[0-9]{2}").Success
がTrueになるやつ
613:デフォルトの名無しさん
09/02/17 17:32:32
フォームの背景でなくて、デスクトップの背景だったら?
614:デフォルトの名無しさん
09/02/17 17:35:25
>>613
Win32APIのSystemParametersInfo使うだけじゃない?
615:580
09/02/17 18:15:57
using System;
using System.Net;
class Test
{
public static void Main()
{
for (int i=0;i<10;i++) {
String url = "URLリンク(pc11.2ch.net)";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);
}
}
}
これで二周回ったところでGetResponse()メソッドが返ってこなくなるんですが、何がいけないのでしょうか?
2chのサーバーの設定の問題でしょうか?
616:デフォルトの名無しさん
09/02/17 18:35:41
XmlSerializer.Deserialize で、<Version>1.003</Version> をデシリアライズして
あるクラスの Verion クラスのプロパティに入れたいと思っているのですが、
0.0 というバージョンが格納されてしまいます。
Version クラスはデシリアライズできないのでしょうか?
617:デフォルトの名無しさん
09/02/17 18:39:01
>>615
サーバ関係ないみたいよ。
うちでも同じようになったし、自宅鯖に向けてもおなじ。
3回目のリクエスト自体来ていない。
618:617
09/02/17 18:44:19
たぶん同時接続数の制限が別のとこにあるんだと思うよ。
ちゃんと終了処理すればいいんじゃないかな。
ためしに毎回Abortしたら止まらなくなった
619:デフォルトの名無しさん
09/02/17 18:46:58
>>615
HttpWebRequest..::.GetResponse メソッドの説明
Close メソッドを呼び出して、ストリームを閉じて接続を解放する必要があります。
この操作を行わないと、アプリケーションで接続が不足することがあります。
620:デフォルトの名無しさん
09/02/17 19:08:55
>>617
>>619
どうもありがとうございます。
リクエストのAbort()、レスポンスのClose()
どちらかを使えば、上手く動作するようになりました。
あと、デフォルトで2になっていた同時接続数の制限は
System.Net.ServicePointManager.DefaultConnectionLimitの
値を変えることで取り除くことができました
621:デフォルトの名無しさん
09/02/17 19:11:41
いやそれは変更するな
622:デフォルトの名無しさん
09/02/17 19:57:12
韓国は我ら優良種である日本国民に、管理運営され、はじめて未来を見ることができるのである。
その事実を無能なる韓国人どもに思い知らせ、我が日本領土である竹島を取り返すべくただいまより攻撃にでる
愚かなる韓国人に対し、再び裁きの鉄槌を振るう時が来た!
/⌒ヽ
( ^ω^)/ ̄/ ̄/
( 二二つ / と)
| / / /
|  ̄| ̄ ̄
攻撃:(p)URLリンク(dokdo.andu.hanafos.com)
サイトで右側を選択すれば竹島は日本の領土!
作戦指令本部:(p)スレリンク(news4vip板)
623:デフォルトの名無しさん
09/02/17 20:45:53
Microsoft.Samples名前空間って、自作アプリに自由に使って、配布してもライセンス違反になりませんか?
Microsoft.Samples.DirectX.UtilityToolkitとか
Microsoft.Samples.ServiceHosting.AspProvidersとか
Microsoft.Samples.Workflowとか
624:デフォルトの名無しさん
09/02/17 20:49:46
>>612
ありがとうございます。できました。
625:デフォルトの名無しさん
09/02/18 01:51:16
Image img;
using (WebClient wc = new WebClient())
using (Stream st = wc.OpenRead("適当な画像のURL"))
img = Image.FromStream(st);
img.Save(@"z:\test.jpg");
Image img;
using (Stream st = new FileStream(@"適当な画像のパス", FileMode.Open))
img = Image.FromStream(st);
img.Save(@"z:\test.jpg");
という2つのコードで、前者は正常に実行できるのに対し、後者は
System.Runtime.InteropServices.ExternalException(Message="GDI+ で汎用エラーが発生しました。")
という例外が発生します。
なぜ前者の場合は正常に実行出来るのでしょうか?
626:デフォルトの名無しさん
09/02/18 02:35:43
>>625
いろいろややこしいことがあるみたい
URLリンク(www.atmarkit.co.jp)
以下で回避が可能
Image img;
using (Stream st = new FileStream(@"inputFile.jpg", FileMode.Open)) {
img = new Bitmap(Image.FromStream(st));
}
img.Save(@"outputFile.jpg");
627:デフォルトの名無しさん
09/02/18 03:01:42
>>926
レスありがとうございます。
対応策は検索して把握してはいたのですが、
先の2つのコードの根本的な違いが気になったのです。
628:デフォルトの名無しさん
09/02/18 04:35:45
>>627
このあたりかな
URLリンク(support.microsoft.com)
ファイル以外のストリームには言及がないのでなんともいえないけど
少なくともファイルは特別に意識していて、ファイルから生成した
ストリームについてはそれを破棄するとイメージにアクセスできなくなるのが
仕様みたい
629:デフォルトの名無しさん
09/02/18 04:45:29
Image も IDisposable だから
using (WebClient client = new WebClient())
using (Stream stream = client.OpenRead(uri))
using (Image image = Image.FromStream(stream))
{
image.Save(path);
}
の方が良くないか?
630:デフォルトの名無しさん
09/02/18 05:35:25
>>625
かなりヤケクソ気味の対処法。
class ForwordOnlyFileStream : FileStream {
public ForwordOnlyFileStream(string filename, FileMode filemode)
: base(filename, filemode) { }
public override bool CanSeek { get { return false; } }
}
Image img;
using (Stream st = new ForwordOnlyFileStream(@"適当な画像のパス", FileMode.Open))
img = Image.FromStream(st);
img.Save(@"z:\test.jpg");
631:デフォルトの名無しさん
09/02/18 09:27:28
>>630
素直に一旦MemoryStreamにコピーしろよって話だな
632:デフォルトの名無しさん
09/02/18 13:07:07
C#2.0で質問です。
継承元のpublic設定されたメソッドやプロパティを、
継承先のクラスで隠蔽して、利用させたくないんですが、
new privateしても表示されてしまうのですが、これを隠す方法はないですか?
633:デフォルトの名無しさん
09/02/18 13:12:12
ありません
634:デフォルトの名無しさん
09/02/18 13:27:06
そういう事をしたくなったってことは設計がおかしい証拠だぬ
635:デフォルトの名無しさん
09/02/18 13:27:21
(ω・ )ゝ なんだってー
継承元でprotectedにして、継承先でpublicにするとかするしかないのか・・
ありがとう
636:デフォルトの名無しさん
09/02/18 13:36:07
>>634
工エエェェ(´д`)ェェエエ工工
確かに無理矢理流用しているから、おかしくなってるきがする。
設計を見直してみるお
ありがとう
637:デフォルトの名無しさん
09/02/18 13:40:36
インターフェイスならメンバ隠して実装できるよ
638:デフォルトの名無しさん
09/02/18 13:42:37
正直いつも似たような機能作る時に
インターフェイス使うかベースクラス継承してオーバーライドで使うか迷ってる俺がいる
639:デフォルトの名無しさん
09/02/18 13:45:36
そこは普通に「似たような機能」クラスを作って包含するのが
一番素直で融通が利く
640:デフォルトの名無しさん
09/02/18 13:55:05
>>639
なる。
凝りすぎもダメなのか
641:デフォルトの名無しさん
09/02/18 14:07:11
>>637
ありがとう。
インターフェースでMethod()を定義して
public class MyBsdeClass : IInterface
public void Method()
などでMethodの処理を書いた基底クラスを作って、
これをさらに継承するということですね。ちょっと試してみます。
ただ、異なる型にまたがって継承させて利用するメソッドではないので、
やはり設計を見直してみようと思います。
642:デフォルトの名無しさん
09/02/18 14:17:41
それじゃダメ
基底クラスでもMethodを明示的実装しないといけない
643:デフォルトの名無しさん
09/02/18 14:28:42
>>642
ありがとう
こんな感じでインターフェースを継承した基底クラスのメソッドに処理を書くってこと?
interface IInterface //■インターフェース
void Method();
public class MyBaseClass : IInterface //■基本的な処理を記述した基底クラス
public void Method()
{
//処理を実装
}
public class MyClass : MyBaseClass //■継承先
644:デフォルトの名無しさん
09/02/18 14:34:26
違うこうするんだよ
public class MyBaseClass : IInterface { void IInterface.Method() { ... } }
public class MyClass : MyBaseClass, IInterface { void IInterface.Method() { ... } }
これで基底クラスの実装は呼べなくなる
645:デフォルトの名無しさん
09/02/18 14:51:09
>>644
あんたすごいな
643じゃないけど少し知識増えたわ
おれもまだまだだな、、、
646:デフォルトの名無しさん
09/02/18 15:07:08
キャストすると呼べるけどね。
is-aの関係が壊れているならそこを修復するのが先な気がする。
implements ... の関係とis a ... の関係は全く別物なんだから、どこかで怪我しそう。
647:デフォルトの名無しさん
09/02/18 15:13:58
>>644
ありがとう。
試してみました。
確かにMyBassClassのMethod();でなく、MyClassのMethod()のほうが実行されますが、
Method();そのものが見えなくなるわけじゃないので、
自分の目的とはちょっと違う感じです。
実験した感じだと、動作としてはインターフェースにしなくともnew public void Method()すれば、
単純な基底クラスのメソッドの実装は呼ばれないと思うのですが、何か他の利点があるということですか?
648:デフォルトの名無しさん
09/02/18 15:23:05
単純にnewで隠した場合は基底クラスにキャストすれば基底クラスの実装を呼べる
>>644だとMyClassのインスタンスをMyBaseClass, IInterfaceどちらにキャストしても
MyBaseClassのMehodの実装は呼べないよ
もちろん((IInterface)(MyBaseClass)).Methodでも同じ
649:デフォルトの名無しさん
09/02/18 15:27:47
え、MyBaseClassにキャストしてからIInterfaceにキャストしても駄目なの?知らなかった・・・
650:デフォルトの名無しさん
09/02/18 15:27:51
>>648
ああ、なるほどそういうことか!!
確かにそういうのが必要なときには便利ですね!
私も設計を見直して、基底クラスをいじったら、いい感じになってきました。
ありがとー
651:デフォルトの名無しさん
09/02/18 15:35:37
あれ、そういう事なら、要はvirtualメソッド使えば良いって単純な話では?
652:デフォルトの名無しさん
09/02/18 15:40:15
Form1にあるチェックボックスとかのGUIを
Form1.cs以外のxxx.csとかから操作したいんだけど
どうすればいいんでしょうか?
653:デフォルトの名無しさん
09/02/18 15:44:24
コントロールのアクセスレベルを変えればできるけど褒められたやり方じゃないな
何の目的でそのチェックボックスがあるのか考えるんだ
その"目的"に対して,Form1にプロパティやメソッドを定義するべき
基本的にコントロールは外に出さない
654:デフォルトの名無しさん
09/02/18 16:15:52
ループ内でCheckBoxで選択された機能だけを使いたいのですが、今はこんな形で処理しているんですけど、
for(){
if(A) A();
if(B) B();
if(C) C();
if(D) D();
}
ABCが30くらいに増えて遅くなってので、最初にチェック判別して必要な機能だけループ内で使用できるよう、
if(A)
if(B)
if(C)
if(D)
for(){
B();
D();
}
の形にしたいのですがどうすればいいの?
655:デフォルトの名無しさん
09/02/18 16:24:26
>>654
それは単純に処理が多くなって遅くなってるのでは?
if文処理がどのくらいの比重を占めてるのかは分からんが。
処理を委譲してチェック外したらヌルオブジェクトに切り替えるとか
656:デフォルトの名無しさん
09/02/18 16:28:27
速い遅いの問題なら
bool a = Aの式; bool b = Bの式; //c,d同様
for() { if (a) A(); if (b) B(); //c,d同様
が速いと思う
forの中を綺麗にしたいなら
var list = new List<Action>();
if (A) list.Add(メソッドAの名前); if (B) list.Add(メソッドBの名前);
for() { foreach (var action in list) action(); }
とか考えられなくはないけど
657:デフォルトの名無しさん
09/02/18 16:53:05
_
∠_)
∧_∧. /
( ・∀・) /
⊂ つ
人 Y ∧_∧∩ ・・・
し (_) ( ´∀`)/
/←>>655
658:デフォルトの名無しさん
09/02/18 16:59:04
>>628
リンクありがとうございます。
取りあえず仕様でどうしようも無いという事ですか。
でもなんでこんな仕様なんだろ。
>>630
なるほど、CanSeekをfalseに固定するだけでも解決出来るんですね。
もしかしてWebClientが大丈夫なのはそれがあるのかな。
659:デフォルトの名無しさん
09/02/18 17:14:20
なんでかって言われたらメモリ節約するためって答えになる
631で言われてる通りシークできないストリームなら内部でMemoryStreamに一旦コピーする
660:デフォルトの名無しさん
09/02/18 17:59:44
>>651
そうなんです
それでいいんだけど、設計見直したらすっきりして、逆に実装が難しいと思ってた機能を
うまく盛り込むことができますた おまいらありがとう
661:デフォルトの名無しさん
09/02/18 20:34:41
Visual C#でログイン認証が通らず、クッキーが取れないサイトがあったのでいろいろ
調べているのですが、Perlでは認証が通ったのでクッキーを見てみると"httponly"という
のがありました。これが原因だとするとVisual C#ではお手上げなんでしょうか?
662:デフォルトの名無しさん
09/02/18 20:37:33
通信プロトコルの勉強をしろ
663:デフォルトの名無しさん
09/02/18 20:42:43
>>661
ワロタ
664:デフォルトの名無しさん
09/02/18 20:46:49
>>661
問題なし
665:デフォルトの名無しさん
09/02/19 11:38:07
C# 2.0Winアプリで質問です。
マルチスレッドでの変数のロック処理について教えてください。
メインスレッドと別のスレッドで処理を行って、
別スレッドで受けたデータをメインスレッドで画面に表示せています。
その時、Listオブジェクト変数を使用してデータを処理しようとしているのですが
このような感じのいいのかが不安なので質問させていただきました。
現在やっている処理は
1.メインスレッドでList変数初期化
2.別スレッドを開始
3.別スレッドでデータをList変数にデータを入れる。(ひたすらスレッドタイマ内でADDし続ける)
5.メインスレッドで一定時間ごとにのデータを画面に表示させる。
6.メインスレッドでListのデータをクリアし、一定時間が経過するのを待つ。(5に戻る)
上記の処理だけを考えた場合、このときList変数をLockしようとしているのですが、ロックするタイミングは
3のデータを入れる時
6のデータをクリアするとき
でよいのでしょうか?
それとも
5のデータを表示させる時(5〜6の間)もロックをする必要があるのでしょうか?
よろしくお願いいたします。
666:デフォルトの名無しさん
09/02/19 12:01:49
後者
667:デフォルトの名無しさん
09/02/19 13:21:46
>>666
ありがとうございます。
ということはとにかく 別スレッドで操作される可能性のある変数を使う場合必ずロックする感じですか…
ありがとうございました。
668:デフォルトの名無しさん
09/02/19 20:54:04
時間のかかる処理のところで
Application.DoEvents();
をはさんで処理してるんですけど、
たまにこの命令で応答なしになってずっとかえってこなくなります。
回避方法や代替方法などありませんでしょうか?
669:デフォルトの名無しさん
09/02/19 20:54:59
BackgroundWorker使う
670:668
09/02/19 20:55:01
VisualStudio2008をつかってます。
671:669
09/02/19 20:56:06
既に回答しました
672:デフォルトの名無しさん
09/02/19 20:57:05
>>669
ありがとうございます。
それでやってみます。
673:デフォルトの名無しさん
09/02/19 22:10:30
.NET Framework 3.5 Service Pack 1
インストールしようとしたら、
「この製品はWindows2000にはインストールできません。
どうしてもインストールしたかったら、XP以上にアップグレードしてください」
ってメッセージが出てきたんだが、どうすればいい?
674:デフォルトの名無しさん
09/02/19 22:12:08
もう答えを知ってるじゃないか
675:デフォルトの名無しさん
09/02/19 22:13:02
どうしたい?
1. XP入れる。
2. .NET Framework 2.0 SP2でお茶を濁す。
676:デフォルトの名無しさん
09/02/19 22:15:36
>>673
C#3.0やLinqを使いたいだけなら、MONOという手もなくはない
677:デフォルトの名無しさん
09/02/19 22:18:05
3.C#を諦める。GAME OVER
678:デフォルトの名無しさん
09/02/19 22:19:07
ゲームだったのかぁぁ
679:デフォルトの名無しさん
09/02/19 22:34:13
small basicというものを入れようとしたら、
「.NETを入れてください」
というメッセージが出てきて、それをいれようとしたら
2000ではダメだ、といわれた。
small basicは2.0 SP2でも動くのかなぁ?
680:デフォルトの名無しさん
09/02/19 22:37:36
MS製の教育用のやつ?
Small BasicはWPF使いまくってるから古い.NETやMONOでは絶対動きません
681:デフォルトの名無しさん
09/02/19 22:43:12
>>680
そしたらXP購入コースかなぁ
682:デフォルトの名無しさん
09/02/19 22:53:08
WPFはVistaにしとけ
Vista動かないならWPFなんかどうせまともに動かん
Small Basicにはそんな価値は全く無いけど
C#使うならXP以降でないと話にならない
683:デフォルトの名無しさん
09/02/20 00:48:53
「部長!うちのVB6製品もそろそろ.NETに移植しないとやばいです」
「そうだな。だがうちの製品の顧客はNT4と2000もいるから、.NETとやらは平気なのか?」
「そんなやつらは旧バージョンを引き続き保守してお使いいただきましょうよ」
「じゃあお前2本分働け」
がーん。
684:デフォルトの名無しさん
09/02/20 01:14:55
Visual C# 2008について質問です。
メーラーを作っています。
設定を簡単にするために、Outlook Expressのsmtpサーバー、Port、ID、Passwordの4項目を引き継ぎたいです。
どこに格納されていて、どう読めばいいか、教えてください。
685:デフォルトの名無しさん
09/02/20 01:21:02
世のメーラーでOutlookの設定を自動で使える奴ってあるの?
686:デフォルトの名無しさん
09/02/20 01:26:51
Thunderbirdのソース読めばいいよ
687:デフォルトの名無しさん
09/02/20 01:29:50
無理だろ
そんなのが取得できたら勝手にメール読み放題ウイルスとか作れちゃうじゃん
688:デフォルトの名無しさん
09/02/20 01:36:05
いやいや
他のマシンの設定情報読んだり書き換えたりするわけじゃないんだから
689:デフォルトの名無しさん
09/02/20 01:39:34
女子高生エロエロ動画.avi .exe
とか実行しちゃったらやばいんじゃん?
690:デフォルトの名無しさん
09/02/20 02:10:45
パスワードデコードできたらヤバイねw
691:デフォルトの名無しさん
09/02/20 02:37:41
アセンブリのあるディレクトリのURI形式じゃない普通のパスを取得する標準的な方法ってありますか?
とりあえず、文字列処理で
System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Substring(8).Replace('/','\\').Replace("WMPEmitMiku.DLL","");
ってやってるんですが、何ともダーティーで。
692:デフォルトの名無しさん
09/02/20 03:14:08
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
string dirpath = new FileInfo(path).DirectoryName;
Console.WriteLine(path);
Console.WriteLine(dirpath);
693:デフォルトの名無しさん
09/02/20 06:21:11
Outlook Express 使ってないから知らんけど、Protected Storage に入ってるんじゃね?
URLリンク(codezine.jp)
smtp とかその辺は、レジストリにありそう。
694:691
09/02/20 09:08:44
>692
LocationプロパティはMSDNにマニフェストがどうちゃらと書いてあって良く分からなかったのですが
UNCパスが取れるのですね。助かりました。ありがとうございます。
695:デフォルトの名無しさん
09/02/20 11:04:15
C#2.0で Socket.BeginConnect メソッドを使ってサーバに接続しています。
上記メソッドを使う時にタイムアウトの時間を指定とかできないんでしょうか?
接続に失敗したとき AsyncCallback で指定した部分に来るのが遅すぎるのでちょっと困っているのですが・・・
補足:
System.Net.Sockets.SocketException:
接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
この情報を早く取得してタイムアウトエラーを出したいのです。
696:デフォルトの名無しさん
09/02/20 12:29:53
みなさんありがとうございました。
リンク先をたどってHideSeek(シェアウェア)を試して、パスワードを含むOutlookExpressの設定データを読めることはわかりました。読めるだけでテキスト書き出しはできないです。
フリーでは、Protected Storage PassViewというのがあるらしい。そのひとつのmailpv.exeを使ったら、簡単にテキスト書き出しもできるので、これを使ってProcess(mailpv.exe)とかもありかもなと思いました。
気軽に「こんなソフトありませんか?」ならこれで終了です。
おっしゃるとおり、Protected Storageに入っているようです。
これは既存のプログラムやC++なのですが、C#の方法は?
C++だと、
PStoreCreateInstance = (TPStoreCreateInstance)
GetProcAddress(hDll,"PStoreCreateInstance");
と書くところを、C#で書ければいいのかなと思うのですが、で、どう書きゃいいんでしょう?
まずは、Windows\System32\Pstorec.dllを参照に追加して。
としようとしたら、「C:\Windows\System32\Pstorec.dllへの参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とかいわれてます。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4850日前に更新/200 KB
担当:undef