ふらっとC#,C♯,C#(初心者用) Part31
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/29(月) 12:39:47「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part30
http://pc11.2ch.net/test/read.cgi/tech/1219220127/
0002デフォルトの名無しさん
2008/09/29(月) 12:40:21http://pc11.2ch.net/test/read.cgi/tech/1219481054/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/
Live2
http://pc11.2ch.net/test/read.cgi/tech/1203674757/
初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
0003デフォルトの名無しさん
2008/09/29(月) 12:40:49http://www.google.co.jp/
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/
0004デフォルトの名無しさん
2008/09/29(月) 13:20:37ってゲームのセーブデータみたいな移動・コピー不可属性のことか?
あれは自分で好きにプログラム組めないからできる話。
0005デフォルトの名無しさん
2008/09/29(月) 13:24:490006デフォルトの名無しさん
2008/09/29(月) 13:30:13そこまで規制する必要ってのも無いとは思うけどなぁ。
機密文章の持ち出しを禁止するため?
簡単に破られても良いなら、ファイルパスがキーになってファイルの暗号化を解くとかその程度で良いんじゃないかな?
それにしても、NTFSにダビング10とかコピーワンスとかあったらいやだなぁ
保護されたファイルを開くと OSがそのプログラムを監視して そのファイルに類似したデータを作成させないようにしたりして
すごく息苦しくていやになるなぁ。
0007デフォルトの名無しさん
2008/09/29(月) 13:31:590008前スレ993
2008/09/29(月) 13:40:28そうです、フォルダ自身やファイル自身に属性があれば制限が可能になる
のだとは思うのですが、少なくともWindows系ではそういう制限はやはり
存在しない、ということですよね?
あればそれをそのフォルダやファイルの作成者が設定可能になっていれば
できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
0009デフォルトの名無しさん
2008/09/29(月) 13:48:44コピー不可だろうがいくつでもコピーできちゃうでしょ、ここはプログラム板だよ?
ファイラーが提供されたものしかない世界じゃないと無理。
0010デフォルトの名無しさん
2008/09/29(月) 13:52:36> できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
誰かエスパーのひと解読頼む
0011デフォルトの名無しさん
2008/09/29(月) 13:58:54>どこかに書き込みできる権限があれば、コピー不可だろうが
>いくつでもコピーできちゃうでしょ
だから、そのデータ(=フォルダ、ファイル)に色がついていて、
色がナンであるかで、書き込みを制限する属性があれば、という
ことですよ。
>>10
その属性を、それらデータ(=フォルダ、ファイル)の作成者が、
OSのサービス機能(プロパティ->セキュリティタブ、など)を使って
設定すればそれが有効になる、というような仕組みということです。
0012デフォルトの名無しさん
2008/09/29(月) 14:00:56その属性を律儀に守らないと無理だろ。
プログラム書いたことあるのか?
0013デフォルトの名無しさん
2008/09/29(月) 14:02:33だから、例えば、「複製作成」の許可と言った感じで、「削除」の許可
の次あたりに追加してあれば、それをチェックすることで、そのフォルダや
ファイルに色がつくわけで、
そのデータを「書き込み」する時点で、それを操作を制限する、という
仕組みということです。これが可能になれば、複製してほしくないフォルダや
ファイルというものを作ることが可能になるわけです。
0014デフォルトの名無しさん
2008/09/29(月) 14:04:20まあ、ですから、「書き込み」という操作にも影響が及ぶような
仕組みでないといけないわけではありますですが・・・。
0015デフォルトの名無しさん
2008/09/29(月) 14:04:56>>8 ooOO(ファッキュー)
ttp://www.nicovideo.jp/watch/sm2364432
0016デフォルトの名無しさん
2008/09/29(月) 14:05:58Explorerでのコピー操作ならそれでいいかもしれないよ?
でもさ、プログラム上、ファイルデータは単なるバイト配列として扱われるわけ。
で、単なるバイト配列を適当に作ったファイルに書き込むのを制限しようがないよね?
0017デフォルトの名無しさん
2008/09/29(月) 14:13:38確かに、どこまでのレベルで制限するのか、という問題はありますね。
ただ、ファイルシステム上の操作と言われる操作機能では制限される、
ということにしておけば、いわゆる 「ファイラ・ソフト」 レベルでは簡単
にはコピーされないで済む、という感じにではできないでしょうか。
ファイラを、そうやって原初レベルのI/Oの操作から作成されてしまえば
確かにできてはしまうのでしょうが・・・。
0018デフォルトの名無しさん
2008/09/29(月) 14:17:29や書き込みが失敗するように
またほかのプログラムとの通信までできないようにOS側で徹底
的に管理するのか
そこまでやったとしても抜け道は存在するような気がするが
0019デフォルトの名無しさん
2008/09/29(月) 14:18:08少なくとも、Win32APIや.NETFramework上のファイルシステム関係のメソッド
からは制限できる、といった感じで。それをやっても、制限としては価値は
ないでしょうか。
0020デフォルトの名無しさん
2008/09/29(月) 14:22:19フォルダやファイルのデータの中身そのもの仕掛けを作り、
それを所定のAPIやメソッドのコピー操作で書き込むときに
引っ掛ける、という感じまででいいかとは思っています。
0021デフォルトの名無しさん
2008/09/29(月) 14:28:25バックアップソフト作る会社が迷惑蒙るだけだろ
0022デフォルトの名無しさん
2008/09/29(月) 14:37:060023デフォルトの名無しさん
2008/09/29(月) 14:50:53わかりました。アドバイスくださり、
ありがとうございました。
0024デフォルトの名無しさん
2008/09/29(月) 15:15:280025デフォルトの名無しさん
2008/09/29(月) 15:16:590026デフォルトの名無しさん
2008/09/29(月) 15:29:33拡張子を.scrにしたらコピーできなくなるよ
0027デフォルトの名無しさん
2008/09/29(月) 18:14:40HttpWebResponse res = (HttpWebResponse)req.GetResponse();
さらに、webのURLが間違えていたり、たまたまサーバーがダウンしているときに
備え、try〜catchの例外処理を施そう試み
try
{
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
}
catch(Exception e)
{
・・・・・
}
Stream st = res.GetResponseStream();
StreamReader sr = new StreamReader(st, enc);
と記述し直しました。
ところがこの状態でコンパイルを試みると、Stream st = res.GetResponseStream();で
「エラー 1 名前 'res' は現在のコンテキスト内に存在しません。」
というエラーが帰ってきました。try〜catchの例外処理に何か間違いでもあったのでしょうか?
0028デフォルトの名無しさん
2008/09/29(月) 18:21:20それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
0029デフォルトの名無しさん
2008/09/29(月) 18:21:28HttpWebResponse res;
ここだけ外に出してごらん。
003027
2008/09/29(月) 18:28:53HttpWebResponse res;
try
{
res = (HttpWebResponse)req.GetResponse();
}
と変更してみましたが、今度は同じく Stream st = res.GetResponseStream();の部分で
「エラー 1 未割り当てのローカル変数 'res' が使用されました。」
という違うエラーが帰ってくるようになりましたorz・・・
その後ものは試しとtry文の前の命令を
HttpWebResponse res = null;
と書き直してみたところエラーも発生することなくコンパイルが通りました。
これでよかったのでしょうか?
003127
2008/09/29(月) 18:29:37> それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
そうするよう参考書に書かれていたんですが(´・ω・`)・・・
0032デフォルトの名無しさん
2008/09/29(月) 18:36:38本当はMSDNに書いてある形でキャッチするようにしないと
0033デフォルトの名無しさん
2008/09/29(月) 18:40:03それで未初期化のresを使う可能性があるという警告だよ。
tryブロックに入れるか、catchしたらres使う行に行かないようにしなくちゃ。
003427
2008/09/29(月) 19:04:09> 初心者向けの本なんだろうからしょうがない
> 本当はMSDNに書いてある形でキャッチするようにしないと
(WebException e)で受け取り、e.Messageあたりでエラーを表示するようにすればいいでしょうか?
>>33
なるほどresは全てtry文の中に収めたほうが堅牢性が増しましたか。
0035デフォルトの名無しさん
2008/09/29(月) 19:17:35自作?
0036デフォルトの名無しさん
2008/09/29(月) 19:23:25003727
2008/09/29(月) 19:24:30自作です。
よく考えたらStreamで受け取ったデータを見て、フォーマットが正しいか否かで
正しくデータを受信できたかどうか判定するのがいいかもしれません。
GetResponse();
の例外ってあまり使う機会は無いかも知れませんね。
0038デフォルトの名無しさん
2008/09/29(月) 19:30:32> の例外ってあまり使う機会は無いかも知れませんね。
や、普通は503返されたりとかしたときの対応が必要だと思うが
0039デフォルトの名無しさん
2008/09/29(月) 20:17:360040デフォルトの名無しさん
2008/09/29(月) 21:08:34生徒、Aさん Bさん Cさん.... がいます。
それぞれの人に、国語や数学のテストの成績があったとして、
(名前,科目,点数)
というようなデータを、それぞれの人がもつ変数に入れていくプログラムを作りたいと考えています。
ここで、(名前,科目,点数)のデータはイベントでランダムに送られてきます。
Aさん、Bさん、... は、生徒クラスを作成し、1人1インスタンスでnewしたとして、
問題1)Aさん、Bさん、... 別のインスタンスを作成する方法がわからない(それぞれにユニークなインスタンス名を与える方法?)
問題2)問題1が解決したとして、ランダムに送られてきたデータを、それぞれのクラスに振り分ける方法がわからない。
というよりも、なんかもっとスマートな解決策があると思うのですが、、、
0041デフォルトの名無しさん
2008/09/29(月) 21:10:430042デフォルトの名無しさん
2008/09/29(月) 21:11:36つかクラスに振り分けるって何よ
0043デフォルトの名無しさん
2008/09/29(月) 21:20:16「インスタンス名」とは変数名のことだと思うが、そんなものはユニークである必要どころか
名前をつける必要すらない。(データベースのレコードに名前なんて必要ないように)
単純化していえばデータ構造は「生徒クラス」のリストでよく、
要は名前なら名前からそれに一致する「生徒クラス」のインスタンスを
検索できる機能を考えればそれで済む。
それができれば問題2も自動的に解決するでしょ。
0044デフォルトの名無しさん
2008/09/29(月) 21:20:40class クラス:List<生徒> // 生徒Collectionでもおk
{ String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
0045デフォルトの名無しさん
2008/09/29(月) 21:20:51Data[] data = GetData();
foreach(Data d in data)
{
if(dic.ContainsKey(d.Name) == false)
{
dic.Add(d.Name, new Student(d.Name, d.Subject, d.Point));
}
else
{
dic[d.Name].AddResult(d.Subject, d.Point);
}
}
こんなんかね
0046デフォルトの名無しさん
2008/09/29(月) 21:29:46TeraPad風ですが、プラグインの追加機能などあります
http://www.dotup.org/uploda/www.dotup.org7215.zip.html
0047デフォルトの名無しさん
2008/09/29(月) 21:32:37>>41さん
すいませんでした。
>>42さん
プロパティに名前を入れておき、送られたデータに対して名前が一致するかしらべるメソッドを用意して、一致すれば科目データを入れるというやり方の場合、
すべてのインスタンスにデータを送る方法がわかりません。そして、そういう処理は効率が悪いと思います。
変な説明で申し訳ないです。
>>43さん
「生徒クラス」のリスト、という意味が分かりません。クラスのリスト?クラスをリストにする?っていう意味が・・・
リストの項目にクラスのアドレスを入れておいて呼び出す?
0048デフォルトの名無しさん
2008/09/29(月) 21:44:11そのStudentのコンストラクタ引数は不自然とおもふw
0049デフォルトの名無しさん
2008/09/29(月) 21:48:42こんな感じか
005040
2008/09/29(月) 21:51:08>>44さん
class クラス:List<生徒>
の意味が分かりません。すいません勉強不足です。
Listを継承してるというのは分かるんですが、<生徒>という部分がどういう意味なのか、、、
>>45さん
Dictionaryの次の< > でくくった部分の意味が44さんと同じくどういう意味を示すのか分かりません。
Data[] data = GetData(); の意味が分かりません。要素数を指定しない場合の配列は後で要素数をしていしないといけないのでは?
0051デフォルトの名無しさん
2008/09/29(月) 21:51:59馬鹿丸出しじゃないか
0052デフォルトの名無しさん
2008/09/29(月) 21:59:330053デフォルトの名無しさん
2008/09/29(月) 21:59:35まあしかし、そういうスレでしょ。
>>47
リストが分からないならとりあえず配列だと思えばいいよ。
「生徒クラス」の(インスタンスの)配列。
その配列の中から、名前なら名前を使って目的の「生徒クラス」のインスタンスを
検索する方法を考えればいい。
他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、
いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で
やってみたら?
0054デフォルトの名無しさん
2008/09/29(月) 22:00:47http://ufcpp.net/study/csharp/
http://msdn.microsoft.com/ja-jp/library/618ayhy6.aspx
http://msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx
0055デフォルトの名無しさん
2008/09/29(月) 22:01:080056デフォルトの名無しさん
2008/09/29(月) 22:03:48Dictionary
http://msdn.microsoft.com/ja-jp/library/xfhwa508.aspx
まあこれを読め
配列は
int[] array = GetArray();
...
int[] GetArray()
{
return new int[]{ 1, 3, 5 };
}
こんなことも出来るんだ
0057デフォルトの名無しさん
2008/09/29(月) 22:09:58いいの?
0058デフォルトの名無しさん
2008/09/29(月) 22:14:30複数の強化に対応できない、ってのは意味不明だけど、
>>40の話はとりあえず名前のみで検索できれば必要十分に聞こえるけど。
005940
2008/09/29(月) 22:16:46馬鹿丸出しで申し訳ないですが、みなさんのアドバイスが充分に理解できませんでした。
コメントや参照サイト先をじっくりと読んでみます。
解決の方法は示して頂きましたので、あとは自分で理解してみます。
こんな初心者の為に貴重な時間を裂いていただき本当にありがとうございました。
では
0060デフォルトの名無しさん
2008/09/29(月) 22:27:50それぞれの生徒が教科と点数のセットのコレクションを持てばいい
0061デフォルトの名無しさん
2008/09/29(月) 23:38:39Aさんの国語の成績、数学の成績ってデータが入ってきたら、「A」だけのキーでdicに
入れてたら、片方の成績しか入らないじゃん。
0062デフォルトの名無しさん
2008/09/29(月) 23:42:01* 1 1 *
Student ------ ExamResult ------ Exam
生徒 試験結果 試験
class Student {
public string Name;
// その他、付加情報 (e.g. 学籍番号, etc.)
public List<ExamResult> ExamResults;
}
class Exam {
public string Name;
// その他、付加情報 (e.g. 実施日時, etc.)
public List<ExamResult> Results;
}
class ExamResult {
public Exam Subject;
public Student Student;
public int Score;
}
List<Student> students;
var stu1 = students.Single(s => s.Name == "鈴木"); // 生徒の検索
stu1.ExamResults.Single(r => r.Subject.Name == "国語" && r.Subject.Date == new DateTime(2008, 7, 10)).Score; // 成績の参照
stu1.ExamResults.Add(new ExamResult { Subject = exam1, Score = 80 }); // 成績情報の追加
0063デフォルトの名無しさん
2008/09/29(月) 23:45:32は配列を入れてるZE
0064デフォルトの名無しさん
2008/09/29(月) 23:58:48いや意味わからんよ。
だからDictionary使うのであれば、Valueは「生徒(の成績)クラス」のインスタンスなんだよ?
0065デフォルトの名無しさん
2008/09/30(火) 10:46:45無理して使う位なら普通のクラスにしてインスタンス生成した方が
いいんでしょうか?
インスタンス生成しなくて良いという事位しか分かりません…。
0066デフォルトの名無しさん
2008/09/30(火) 10:57:37Mathとかね
まあ慣れん間はわざわざ作ることもないか
0067デフォルトの名無しさん
2008/09/30(火) 11:15:06分かり易いですね。参考になりました。有り難う御座いました。
0068デフォルトの名無しさん
2008/09/30(火) 13:19:51決してそのクラスがほかのクラスの参照を持つわけではなかったりした時
staticクラスにする方がいいの?
0069デフォルトの名無しさん
2008/09/30(火) 13:31:25007069
2008/09/30(火) 13:38:53同じメソッドを同じ引数で呼び出したらいつも同じ結果が得られるならstaticでおk
0071デフォルトの名無しさん
2008/09/30(火) 16:16:17どういうプログラムを組めばいいでしょうか?
req = (HttpWebRequest)WebRequest.Create("http://hoge.com/ahya.txt");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
if ("http://hoge.com/ahya.txt".Equals(res.ResponseUri))
{
Console.Writeline("指定されたtxtファイルはありましたよ( ´∀`)b");
}
のようなプログラムを組めばよろしいでしょうか?
それとももっと適切なプログラムがありますか?
0072デフォルトの名無しさん
2008/09/30(火) 16:22:44res.StatusCode が200ならというだけじゃダメなのかな。
0073デフォルトの名無しさん
2008/09/30(火) 16:23:210074デフォルトの名無しさん
2008/09/30(火) 16:29:22FileNotFoundのときにリダイレクトで200 OKな404.html返してきたり
0075デフォルトの名無しさん
2008/09/30(火) 16:42:49それだと HTTP GET してしまうので
req.Method = "HEAD"; するとか
007671
2008/09/30(火) 16:54:42そうなんですよ。リダイレクトするサーバーだと指定したファイルが存在しない
違うページに飛ばされた上で200:OKが返されたりするんで判定に使うには
今一歩信頼性が無いんです。
0077デフォルトの名無しさん
2008/09/30(火) 17:02:39URL完全一致なの?
別の場所にリダイレクトするけど同じファイル名だったりするのはどうなの?
0078デフォルトの名無しさん
2008/09/30(火) 17:03:28リダイレクトされたら存在しないとするってんなら多少は簡単になるが
存在しなくても200 OKを返すって挙動も可能なんだし(負荷が大きくなるから普通はしないだろうが)
007971
2008/09/30(火) 17:08:26はい、指定した場所にURLが一致するファイルが存在しなければ
そのURLは無効というふうに判断したいです。
リダイレクトされた場合は存在しないと判断したいです。
0080デフォルトの名無しさん
2008/09/30(火) 17:14:07Uri uri = new Uri("http://hoge.com/ahya.txt");
if (uri.Equals(res.ResponseUri))
だろうなあ。
0081デフォルトの名無しさん
2008/09/30(火) 18:15:00それ無効にしといて、200帰るかどうかみりゃいいんじゃないのか。
0082デフォルトの名無しさん
2008/09/30(火) 18:18:29そんなのあったのか、知らなかった
0083デフォルトの名無しさん
2008/09/30(火) 19:00:040084デフォルトの名無しさん
2008/09/30(火) 19:07:210085デフォルトの名無しさん
2008/09/30(火) 19:08:130086デフォルトの名無しさん
2008/09/30(火) 19:11:020087デフォルトの名無しさん
2008/09/30(火) 19:12:52今は閲覧目的に限り無償一般公開されてるんだよ
0088デフォルトの名無しさん
2008/09/30(火) 19:52:540089デフォルトの名無しさん
2008/09/30(火) 20:07:15よろしければ御教授ください、お願いします。
0090デフォルトの名無しさん
2008/09/30(火) 20:09:220092デフォルトの名無しさん
2008/09/30(火) 20:31:23プロパティのことか?
強いて言うなら、変数っぽいメソッドを作るための仕様という感じかな?
C#の入門サイトで理解できなかったら、いっそうのこと他の言語のサイトも見てみると理解できることもあるかもしれない。
たとえばTextBoxでTextプロパティがあるけど、これをプロパティを使わないでやるとしたら
textbox1.SetText("hogera");
String hoge = textbox1.GetText();と書かなければならない。
もちろん
class TextBox
{
public String Text;
}
として公開してしまえばtextbox1.Text = "hogera";で書き込み読み込みができるが、
SetText(String value)
{ // ReadOnlyの時は変更禁止 (こういう処理を副作用と言う)
if (!this.ReadOnly) this.str = value;
}
というようなことはできなくなる。これをできるようにするためのものがプロパティ
public String str; // Textの実体。こんなダサイ名前をつけるのはよろしくないけど
public String Text{
get { return this.str;}
set { if (!this.ReadOnly) this.str = value;}
}
これでtextbox1.Text = "hoge"とかができるようになる。
また、副作用のないプロパティは(今後、副作用を設定するかもしれないので必要)
public String Text { get; set;}と書くことができる
009471
2008/09/30(火) 20:43:19どうもです。
req.AllowAutoRedirect = false;
でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
0095デフォルトの名無しさん
2008/09/30(火) 20:45:20それだったらメソッドで書けばいいだろ
なんでプロパティ使うんだよ
0096デフォルトの名無しさん
2008/09/30(火) 20:46:52だったら、とはどういう意味?
0097デフォルトの名無しさん
2008/09/30(火) 20:47:170098デフォルトの名無しさん
2008/09/30(火) 20:54:380099デフォルトの名無しさん
2008/09/30(火) 20:55:500100デフォルトの名無しさん
2008/09/30(火) 21:00:250101デフォルトの名無しさん
2008/09/30(火) 21:22:37クリップボードからテキストボックスに文字を貼りつけています。
単に貼りつけると、テキストボックスで文字入力できなくなるので、
・クリップボードの文字をメモリーする。
・クリップボードの文字がメモリーと異なるときは、貼りつける。
・クリップボードの文字がメモリーとおなじときは、なにもしない。
という処理を考えました。
clipboardwatchtimer.Interval = 500;
clipboardwatchtimer.Enabled = true;
private void clipboardwatchtimer_Tick(object sender, EventArgs e){
if (Clipboard.ContainsText()) {
string clipboardTextBefore = (Clipboard.GetText());
System.Threading.Thread.Sleep(200);
string clipboardTextAfter = (Clipboard.GetText());
if (clipboardTextAfter != clipboardTextBefore)
{textBox1.Text = (Clipboard.GetText());}
}}
これで、4回は動くのですが、そのあとは取得できなくなってしまいます。
アドバイスお願いします。
■ このスレッドは過去ログ倉庫に格納されています