ふらっとC#,C♯,C#(初心者用) Part55

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/02/27(土) 11:15:03
スレッドセーフって意味が曖昧だが、まあそうだ。
953デフォルトの名無しさん:2010/02/27(土) 11:18:54
>>951
クラスがやっていることによる。
依存性がないならstaticだろうが通常のコンストラクタだろうがスレッドセーフだ。
954デフォルトの名無しさん:2010/02/27(土) 11:20:19
>>952-953
ありがとうございます。
955913:2010/02/27(土) 12:35:07
>>942-945
素晴らしい!それを見る限り、mshtml参照しなくても同じことできるっぽいですね。
mshtmlでイベント登録したときも、
なぜか3回呼ばれていました。
これはちょっとやっかいですね・・・
956913:2010/02/27(土) 13:11:15
>>942-945
ちなみにこういうことができるよ〜っていう情報はどこから手に入れたらいいでしょうか?
957デフォルトの名無しさん:2010/02/27(土) 13:34:38
msdn
958デフォルトの名無しさん:2010/02/27(土) 15:29:31
>>956
自力で解析した

どう検索していいかワードが浮かばなかったのでドット打って一つ一つ見て回った
959913:2010/02/27(土) 22:12:08
スクリプト言語と違ってネットに情報が少ないんですよねー
MSDNはなんだか見づらいし・・・
ドット打って調べるとか、MSDNで頑張るしかないか
960デフォルトの名無しさん:2010/02/28(日) 01:02:11
アクティブウィンドウを監視したいんですけど、
タイマーを使わない方法ありますか?

GetForegroundWindow() を 100 ミリ秒ごとに
呼び出してもやりたいことはできるんですが、
タイマーはできれば使いたくないと思いまして。
961デフォルトの名無しさん:2010/02/28(日) 01:24:28
あるかも
962デフォルトの名無しさん:2010/02/28(日) 06:59:05
すみません、小文字のフルパスファイル名から
HDDに記録されている大文字小文字の正しいファイル名を取得する方法はありますでしょうか?
System.IO.FileInfo fi = new System.IO.FileInfo(filename);
string fn = Path.GetFullPath(filename);
とやっても取得できませんでした。
963デフォルトの名無しさん:2010/02/28(日) 07:19:09
FileInfoの中身も正しく取得されてないのか。これ.netのバグじゃね?
964デフォルトの名無しさん:2010/02/28(日) 07:30:43
バグなのかわからんけどファイルはS-JIS、内部はusc-2という変換してなかったっけ?

あとは大文字小文字区別ってあったっけ?
965デフォルトの名無しさん:2010/02/28(日) 07:30:55
うん、バグじゃね?
966デフォルトの名無しさん:2010/02/28(日) 07:32:27
今フォルダをAAA作ってそのあとaaa作ろうとしたけど同じ物があるって警告でたよ

windows(というかDOS)は確か大文字小文字の区別は無かったはず・・・
967デフォルトの名無しさん:2010/02/28(日) 07:44:07
確かunix系は大文字小文字は別だったはずなんだよな・・・
なのでwindows系はもしかしたら勝手にLowerもしくはUpperやってるかもしれん
968デフォルトの名無しさん:2010/02/28(日) 07:52:47
Exists等で比較するときは大文字小文字の区別はしないが、
保存するときは大文字小文字は指定されたまま保存するでしょ?
でないと再度エクスプローラで表示したときに大文字小文字区別して表示できない。
969デフォルトの名無しさん:2010/02/28(日) 07:56:03
普通にエクスプローラ上でaaaとAAA作るだけでも警告でるから。
970デフォルトの名無しさん:2010/02/28(日) 08:09:42
>>962
var dir = new DirectoryInfo(Path.GetDirectoryName(filename));
var file = dir.GetFiles(Path.GetFileName(filename));

これでファイルがあればfile[0].FullNameに入る
フォルダ名は駄目だから同じようなことをルートからdir.GetDirectoriesしていけばいいと思う
971デフォルトの名無しさん:2010/02/28(日) 08:09:51
string fn = System.IO.Directory.GetFiles(
System.IO.Path.GetDirectoryName(filename),System.IO.Path.GetFileName(filename))[0];
で、正しいパスは取れるけどなんかなぁ。FileInfoで取れないのが納得できん。
972デフォルトの名無しさん:2010/02/28(日) 08:14:23
表示名がcase sensitiveなのは見やすさの為だけのようだね。
それでも、見やすさが欲しい時のために大小区別して取得されるべきだと思う。
973デフォルトの名無しさん:2010/02/28(日) 08:15:13
System.IO.FileInfo fi = new System.IO.FileInfo(filename);
string fn = Path.GetFullPath(filename);

この両方はfilenameで指定した物がそのままでるのか・・・
974デフォルトの名無しさん:2010/02/28(日) 08:16:58
>>972
まあ文字の扱いを知ってる人ならいいかもしれないがそんなの知らない人はおかしいと感じるかもなあ・・・
975デフォルトの名無しさん:2010/02/28(日) 08:17:43
ソース見てないけどPathクラスは文字列処理してるだけの気がする
976デフォルトの名無しさん:2010/02/28(日) 08:42:09
こんな感じ?
string fullname = Path.GetFullPath(filename);
string[] paths = fullname.Split(':', '\\');
string fullpath = paths[0].ToUpper() + ":\\";
for (int i = 2; i < paths.Length - 1; i++)
fullpath = Directory.GetDirectories(fullpath, paths[i])[0];
fullpath = Directory.GetFiles(fullpath, paths[paths.Length - 1])[0];
977デフォルトの名無しさん:2010/02/28(日) 09:14:50
C#で「ネット上に情報が少ない」とか言ってる奴は、さっさとやめたほうがいいぞ。
978デフォルトの名無しさん:2010/02/28(日) 09:17:58
既存のコントロールを継承したクラスを作る場合、ソリューションエクスプローラーから
クラスとして追加して継承元コントロールを書く方がいいのか
それともユーザーコントロールとして追加するのがいいのか・・・

同じコントロールに同じ固定処理を施すだけなんだけで基本的には元のコントロール
として使うんだけどさ・・・
979デフォルトの名無しさん:2010/02/28(日) 09:19:56
>>978
今は前者でいいと思うよ。
980デフォルトの名無しさん:2010/02/28(日) 09:20:37
>>977
少ないというかHTML関連は雑音が多いんだよ
ASP.NETやjavascript関連でHTML部分をいじる解説は山ほど出るんだが
C#になるとぐっと減るし、あってもmshtmlを使うような方法とかになるんだよ
あとはVC++とかね・・・

なのでどうぐぐれば最適な答えに辿り付くかを探し当てるのがものすごく大変だったよ
981デフォルトの名無しさん:2010/02/28(日) 09:21:26
>>979
ありがとう
982デフォルトの名無しさん:2010/02/28(日) 09:26:27
そりゃ、そのものズバリはないかもしれん。
でもさー。HtmlDocumentなんて、mshtmlをベースにしたものなんだし、
JavaScriptのgetElementByほげ系だって参考になるだろうよ。
983デフォルトの名無しさん:2010/02/28(日) 09:27:53
>>982
今はなんとなく見得てきたからその言い分はわかるけど、これから勉強って人にはノイズでしかなかったと思うよ・・・
984デフォルトの名無しさん:2010/02/28(日) 09:35:17
そう思いたければそれでいいじゃん。
で、一生初心者やってれば。
985デフォルトの名無しさん:2010/02/28(日) 09:37:44
意地でも叩きたいのがいるな
自分だって紆余曲折した時代だってあったろうに・・・
しかも初心者用とかかれたスレで・・・
986デフォルトの名無しさん:2010/02/28(日) 11:10:08
mining?
987デフォルトの名無しさん:2010/02/28(日) 11:33:40
>>976
private static readonly StringBuilder buf = new StringBuilder(260);
public static string GetDisplayPath(string path) {
  var pidl = ILCreateFromPath(path);
  SHGetPathFromIDList(pidl, buf);
  ILFree(pidl);
  return (buf.Length > 0) ? buf.ToString() : path;
}

Win32APIを使うバージョンを作ってみた。P/Invokeの宣言は省略
非スレッドセーフでエラー処理もなし
988デフォルトの名無しさん:2010/02/28(日) 17:19:27
質問です。
ファイラーのようなものを作っているのですが、
ファイルの「コピー」はClipboard.SetDataObjectでなんとかできました。
ファイルの「切り取り」はどうすれば実装できますか?
989デフォルトの名無しさん:2010/02/28(日) 17:20:59
貼り付けた時にコピー元を削除すれば良いんじゃないの?
990988:2010/02/28(日) 17:25:01
その場合は貼り付け時のタイミングをどうにか捕まえて、
コピー元を削除することになりますが、アプリケーションを
終了してしまっていると削除できないですよね?
991デフォルトの名無しさん:2010/02/28(日) 17:29:41
>>990
何で迷ってるかよくわからんが
クリップボードも確かファイルのコピーとか切り取りって

「xxをコピー予定」とか「xxを切り取り予定」
くらいで実際に貼り付けの段階まで実体は何もしてないと思うんだが

貼り付けが実行されたときに元と先のファイルをロックして自分の好きなように
作業すればいいだけと思うんだが
992988:2010/02/28(日) 17:48:05
確かに「切り取り」すると貼り付けるまでファイルが半透明になるので、
そういう”予定”の情報をクリップボード側(もしくはOS?)が保持してそうですが、
「切り取り」ですよって情報をどうやって投げる事ができるのでしょうか?
993デフォルトの名無しさん:2010/02/28(日) 17:51:23
次スレは?
俺は制限で無理だった
994デフォルトの名無しさん:2010/02/28(日) 17:51:59
>>992
エクスプローラーはクリップボードに予定が入ってれば張り付けが黒字になりますよね?
それをクリックしたらイベント発生でクリップボード参照して動けばいいんでないの?
995デフォルトの名無しさん:2010/02/28(日) 17:52:33
難しく考えすぎ。
Excelのセルを切り取ってメモ帳に貼ってみ。
で、メモ帳のテキストを切り取ってみ。
切り取りはそもそもアプリ内で閉じた話。
996デフォルトの名無しさん:2010/02/28(日) 17:53:16
>>995
ファイルのコピーとテキストとかの話は分けたほうがいいかも
テキストとかは多分選択した範囲全部持ってるだろうから
997デフォルトの名無しさん:2010/02/28(日) 17:55:01
>>996
たぶんとかじゃなくて・・・
想像語る前にクリップボード監視ソフトをまず作れよ。挙動分かるから。
998996:2010/02/28(日) 17:56:56
>>997
俺は質問者じゃない
クリップボードの挙動は見てればわかるよw
999デフォルトの名無しさん:2010/02/28(日) 17:58:00
>>998
分かってないから多分とかだろうとか言ってんだろw
1000デフォルトの名無しさん:2010/02/28(日) 17:59:29
うま
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。