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

■ このスレッドは過去ログ倉庫に格納されています
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/05/21(金) 20:55:20.39ID:LYjrJpHE0
>>51
めっちゃきもちわるいわあ
2021/05/22(土) 08:57:11.87ID:hnUmAMvp0
Winform(.net 4.8)でentity frameworkにてクラス内の値を変換したいのですがどのようにするのでしょうか
public class StringValue
{
public StringValue(string s) { Value = s; }
public string Value { get; set; }
}
モデル内
public class Sample
{
[NotMapped]
public StringValue dummy { get; set; }
public string value { get => dummy.Value; private set => dummy = new StringValue(value); }
}
今は上記のような感じでStringValueをvalueに見立ててデータベース上でnvarchar:valueとして扱っています
コード上はクラスで扱いつつデータベースでは別の型として扱うという事をしたいです
EFCoreではHasConversionでできそうですがEFではそう言ったのは無いのでしょうか?
2021/05/22(土) 09:46:32.75ID:hnUmAMvp0
>>53なんか解決かもです
出かけるので確認するのは後になりますが駄目ならまた書き込みます
ありがとうございます
2021/05/23(日) 21:45:22.13ID:y8mHkt/k0
オブジェクト初期化子とコンストラクタは何が違うのでしょうか?
見た目はインスタンス作成時に()を付与するかどうかの違いがありますが、やってる事は同じに見えます…
別物として扱っているのは理由があるからなのだと思いますがイメージが掴めません
初歩的な質問ですみませんが教えてください
2021/05/23(日) 21:58:29.07ID:pYmK4nAPa
前スレで同じこと聞いてない?w
https://mevius.5ch.net/test/read.cgi/tech/1616471904/327-
2021/05/23(日) 22:02:16.32ID:RNjOm9Rva
コンストラクタを実行したあと属性に代入するのが初期化子
コンストラクタにはインスタンス化時に絶対に必要な処理を書く
初期化子にはどっちでもいいオプションを書く
2021/05/24(月) 18:26:23.84ID:x4lG9/QZd
>>27
私感じでやっちゃってますね。みんなさんが言うようにclassでformを使うのは良くないのは言われれば分かりますが、Formを使わないやり方がPublic static使う方法しか分からないし、ネット検索かけてもformを渡してるやり方ばかり出てきますね。

Public static string stA
Public static string stB

Public void AddFile
〇〇.add stA + stB

先生がネット故に...みなさんはどこで学ぶんですか?
2021/05/24(月) 18:51:16.14ID:hM0efzfu0
>>58
会社ソースとかMSDNとか
画面とデータを分けるやり方はそういう構造を要求する
フレームワークやライブラリが多かったってだけかも
2021/05/24(月) 19:25:01.66ID:f+6lGWLS0
>>58
ネットで調べるなら、GUIアーキテクチャ、MVC、MVVM、関心の分離あたりで調べたら?
ネットで十分に学べる
2021/05/24(月) 19:49:24.96ID:NzBI28bl0
この短い数行のコード見ただけで相当ヤバいのが分かる。
これは関わっちゃいけないやつだ。
2021/05/24(月) 20:41:17.35ID:i2eTwvSN0
葦原将軍の生まれ変わりと見た(^_^)ノ
2021/05/25(火) 06:29:00.67ID:PTaC3ctB0
LangVersionか何か判定する方法ある?
実際はLangVersionを判定したいわけじゃなく、
C#が「interfaceのデフォルトが使えるバージョン」ならデフォルト実装を用意したものを、
そうでなければデフォルト実装はなし、
というのを#ifプリプロセッサな何かで切り替えたいんだが。
2021/05/25(火) 11:32:44.90ID:MwLEufUx0
どうせ.NET Frameworkなら最新のC#使ってもデフォルト実装は使えないんだから
言語のバージョンじゃなくて.NETのバージョンで分けたほうが良くない?
2021/05/25(火) 13:30:21.38ID:FpV6PuqQa
あればここに載せてるだろうからないんでしょうね
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/preprocessor-directives

まああってもC#のプリプロセッサのシンボルは定義済みかどうかしか評価できないから
既述が大変そうだよね

結局VS使うならプロジェクトのプロパティーで自分でシンボル定義してソリューション構成を
手動で切り替えるしかないんじゃないのかな
2021/05/25(火) 14:32:42.00ID:PTaC3ctB0
#if (NET or NETCOREAPP3_1)

でとりあえず要件満たせそうなので
これでいきます。
67デフォルトの名無しさん (ワッチョイ dfb0-5BAZ)
垢版 |
2021/05/26(水) 09:59:35.98ID:qJ3DTor20
最近VisualStudio2017から2019に変えたんだけど
WindowsAPIは使えなくなったの?
2017で書いたプロジェクトなら2019で読み込んで動くけど
直接2019から同じこコード書き始めると「現在のコンテキストには名前が見つかりません」
ってでて波線がで警告表示される
これは2019から始まったターゲットフレームワークとかいう奴が影響してるのか?
どうしたら以前のようにWindowsAPIが使えますか?
2021/05/26(水) 10:14:15.14ID:FSQy2KRV0
普通にやれば普通に今まで通り動くので
何かが普通にできてないんだろう としか言えん

Windows API呼び出すならTargetFrameworkはnet5-windowsにすべきではあるけど
別にそれは必要条件ではない
単にnet5でも問題ない(Windows以外だと実行時例外になるだけ)
69デフォルトの名無しさん (ワッチョイ dfb0-5BAZ)
垢版 |
2021/05/26(水) 10:49:28.94ID:qJ3DTor20
>>68
resありがとうございます
.NET5で試してもできませんでした
ただし「usinディレクティブか、アセンブリの参照が違うのでは?」
と具体的なメッセージに変わりましたから、
何か探しに行ってくれてるようですね
これは単純にIDEとしてのVS2019のバグということでしょうかね?
2021/05/26(水) 10:51:53.53ID:FSQy2KRV0
いや単にあなたのコードの記述ミスということだと思うよ
2021/05/26(水) 11:07:29.14ID:SkyFdszB0
もしかするとDLL参照が黄色いマーク付いてるんじゃね?
2021/05/26(水) 11:19:52.23ID:cScpWA/k0
昨日今日使い始めたやつがツールのバグを疑う世界
73デフォルトの名無しさん (エムゾネ FFba-4Cki)
垢版 |
2021/05/26(水) 11:25:04.91ID:2/BE6bBSF
ソースと環境を晒すべき
2021/05/26(水) 12:15:50.54ID:Q8/sORJB0
ブラウザからSQL文とパラメータを受け取って、PostgreSQLのテーブルを検索し、結果を返すWebAPIを作成しています。
PostgreSQLとのやり取りはDapperを使っており、パラメータは匿名型で記述しています。

ブラウザからSQL文とパラメータを送る際にjson形式でシリアライズしているのですが、これをAPI側でデシリアライズを行うと匿名型が元と違う形になってしまいます。

var foo = new { Key1 = 1, Key2 = 2};
// foo = { Key1 = 1, Key2 = 2 }

var strJson = JsonSerializer.Serialize(foo);
// strJson = "{\"Key1\":1,\"Key2\":2}"

var bar = JsonSerializer.Deserialize<object>(strJson);
// bar = ValueKind = Object : "{"Key1":1,"Key2":2}"

デシリアライズした時に、シリアライズ前と同じ状態にすることは出来ないのでしょうか。
2021/05/26(水) 12:45:20.58ID:cScpWA/k0
DataContractJsonSerializerの代わりにJavaScriptSerializerを使う
2021/05/26(水) 13:08:02.39ID:FSQy2KRV0
Json.NETなら.Deserialize<Dictionary<string, object>>(...)にすればDapperのパラメータオブジェクトに使える
2021/05/26(水) 14:04:52.01ID:Q8/sORJB0
>>75,76
Json.NET で出来ました。ありがとうございます。
2021/05/26(水) 17:06:43.67ID:vmYXos7Q0
処理を非同期にするかどうかの切り分けってどうすればいいん?
HTTPリクエストとか、I/Oとか、DB書き込みくらいでいいの?
2021/05/26(水) 17:56:01.15ID:cScpWA/k0
野生の勘
2021/05/26(水) 18:02:02.54ID:FSQy2KRV0
基本はIOバウンドなら非同期、CPUバウンドなら同期、でいいんじゃないかな
2021/05/26(水) 18:17:47.51ID:rgCCVIaL0
処理の完了を待たずに他の処理をしたい場合や
UIスレッドをブロックしたくない場合は非同期にする
2021/05/26(水) 18:34:13.84ID:wtKQcQ0P0
非同期にしたら最後
次の処理が次の行とは限らない地獄
2021/05/26(水) 18:41:14.07ID:UtsUe89ga
基本的にまずは全て非同期
これは非同期にする意味ないなと思ったら同期
2021/05/26(水) 22:04:01.82ID:c9Vxajem0
いや普通基本は同期でヘビーなとこだけ非同期にすべきだよ。
全てのアプリが何もかも全部のステップ非同期なんかにしたら、
全体的にはCPU食うだけでメッチャ重くなる。
2021/05/26(水) 22:41:04.74ID:UtsUe89ga
>>84
だから意味ないところは同期にする
2021/05/26(水) 23:01:29.12ID:W7oYIEbZ0
その、意味があるとかないとかを、どうやって判断するかと聞いてるんじゃないかね
2021/05/26(水) 23:02:37.43ID:c9Vxajem0
それだとまずは全てasyncで制作したあと、
ああここは意味がないなと、ひとつひとつあたって普通の同期に変えていく作業するわけでしょ。

だって基本まずはすべて非同期といってるわけだから。
2021/05/26(水) 23:26:44.94ID:SkyFdszB0
時間がかかるのは非同期にしたほうがいいが、短いのは切り替えの分だけ遅くなるかもな
2021/05/27(木) 00:31:55.35ID:4W3Xfkm6a
>>87
書く前にわかるだろ
2021/05/27(木) 00:56:56.72ID:1MRs9mFSa
もうやめとけってw
2021/05/27(木) 01:59:03.14ID:4CedIZFv0
>>88
全部taskValueで書けば良いんだな!
92デフォルトの名無しさん (ラクッペペ MMb6-9F53)
垢版 |
2021/05/27(木) 08:30:07.04ID:f+HvaIKyM
非同期中に他になにかやりたいことがあれば非同期

ただ待ってるだけなら同期
2021/05/27(木) 08:35:36.75ID:PMifv8cua
基本非同期とか言ってる人は、本当にアプリ組んだことあるのか疑問
2021/05/27(木) 09:12:32.37ID:7nNOolzWM
基本は非同期でいいんだよ
どうせデータアクセスやらAPIコールで呼び出し元まで遡って非同期になる
まずは非同期で考えて考えた結果こいつは非同期にする価値がないと気付いたら同期にする
それでおk
例えばドメインクラスなどはすぐに非同期にする価値ねえなと気付く筈なので同期にすればよい

初心者がやりがちなミスは非同期にすべきインターフェースメソッド、デリゲートを同期で定義してしまうことだ
これは同期デフォルト脳の弊害であるがこのミスは後々ボディブローのように効いてくる
まずは非同期で考えてじっくり考えた結果非同期にする価値なしとわかったら同期にする
こうすればゴミのようなインターフェース、デリゲートに苛つかなくて済む
2021/05/27(木) 11:25:27.22ID:VDO1F2Iy0
基本は非同期だろ
2021/05/27(木) 11:45:36.96ID:FpmPCpLLr
アプリかサーバかとか環境の平準リソースとかでも変わるしなあ

完成までに一度でもちゃんと検討しとけばいいと思うわ
97デフォルトの名無しさん (ワッチョイ 275f-4Cki)
垢版 |
2021/05/27(木) 14:40:09.29ID:U0nLnJgd0
Java は throw が伝染する・・・
C# は async が伝染する・・・
2021/05/27(木) 15:58:32.56ID:59fz6k+L0
async voidで解決
2021/05/27(木) 20:38:38.25ID:5gyWgj9W0
async使ったことないお
2021/05/27(木) 22:08:31.07ID:P0524FRt0
しばらくお待ちくださいのメッセージは非同期
101デフォルトの名無しさん (ブーイモ MM26-yRoj)
垢版 |
2021/05/27(木) 22:44:17.51ID:GWsz6i+wM
>>99
x async使ったことないお
o async使ったことないよ

日本語は正確に。
2021/05/28(金) 03:02:26.12ID:ukkv+1yM0
使うのWinFormsだからってナメてたらオーナードローと追加機能まみれで、チャリが戦車になるレベルで原型とどめてないコントロールばっか。
WPFのほうがだいぶ楽だったよ・・・タスケテ・・・
2021/05/28(金) 04:37:28.38ID:eNCMSwEe0
JavaScript, Node.js は非同期で、例外などが面倒くさい

だから、同期のRuby, Ruby on Rails を使う
2021/05/28(金) 07:07:03.28ID:LkJzbBRc0
>>102
チャリ→チャリオット
原型は完全に残ってるな
2021/05/28(金) 09:31:52.57ID:6AxbZXMl0
チャリオットの方が古いんだぜ?
2021/05/28(金) 10:05:09.64ID:YP1Y+7z60
名古屋ではケッタマシーンと言う
昭和の頃から
2021/05/28(金) 18:38:06.39ID:AMiYNwV2d
formで入力→計算→出力てな感じなもの作成してます。
exe起動後一番最初に入力するTextBox1に番号記号を入力します。例A−101など。
それを入力した時から他の人が同一番号記号を使用出来なくなるようにしたいんですがどうすればいいですか?
2021/05/28(金) 19:26:02.56ID:JNHeGsYc0
データベースに文字列を登録して各ユーザーがチェックすればOK
2021/05/28(金) 19:29:49.66ID:EVIGfz1i0
他の人は何処に居るの?
2021/05/29(土) 08:53:16.72ID:mnYn/SGN0
データベースからデータグリッドビューに表示させる際の文字列のソートが分かりません
データベース
id(int:主キー,自動採番), code(string:値としては数値で構成"01","02","10"等), name(string)
OrderByとかの使い方が良く分かってないだけだと思うのですがうまくいきません
//登録
Test.SaveChanges();
//登録後、ソートしてコード順で表示したい
Test.DbSetEntity.Where(x => x.id == id).Load();
DGVView.DataSource = DbSetEntity.Local.ToBindingList();

ご教授いただければ幸いです
2021/05/30(日) 14:35:56.95ID:borQq+I40
20行程度の1つのメソッドだけポリモーフィズム使って処理させたい&継承するクラスが複数有るとき、
サブクラス毎にファイル別ける? 同じファイルに全部書く?

今までファイル別けてたんだけど、なんか邪魔なのでファイル1個で良い気がしてきた
ただ、そうすると今度はファイル名に悩む
フォルダ作ってそこにファイル別けて全部ぶち込めば良いのかな?
2021/05/30(日) 14:53:56.25ID:McAyMcZBM
1メソッドだけの差し替えならデリゲート使えよ
それはともかく、俺は仕事では突っ込まれるのが面倒だから必ず分ける
プライベートなら適当に意味のある単位で纏めることもある
2021/05/30(日) 15:12:33.91ID:AeBNzYwcM
サブクラスをその継承元クラス内にインナークラスとして定義する前提で同じファイルに書く
仮にそのクラスが肥大化したら「BaseClass.ExtendedClass.cs」って別ファイルにpartialで切り出す
ってのを自分はよくやる

ただしインナークラスをそういう風に使うのは一般的にはやっちゃいけない気もする
2021/05/30(日) 15:21:34.04ID:McAyMcZBM
そもそも1メソッドだけなのにあえて多態を使う理由は実装を分散させたいからに尽きるわけで、
結局1ファイルに纏めるんならそれもうswitchでもええやろという気はする
2021/05/30(日) 15:35:09.61ID:4O1ZlwMf0
クソデカclassにすると、newする時間もバカにできない
2021/05/30(日) 15:45:56.38ID:Petj9nTfa
>>111
1ファイルに複数の型があっても全然構わないと思うよ。
Enumにそんな原則誰も適用してないよね?

VSにはクラスビューもあるし必要なら簡単に定義場所に飛べるので
ファイル名にこだわる必要はあまりないと思う。
だから単にベースクラスの名前でもいいと思うけど、気になるなら
「Hogeとその派生クラス」みたいにするだけじゃないの?
2021/05/30(日) 16:01:20.36ID:+uKRRzZAM
そうはならんやろ
2021/05/30(日) 16:32:51.89ID:pNxwDlXH0
>>115
それソースある?
2021/05/30(日) 17:46:22.08ID:Jq+vr6RQ0
>>111
ボリモーフィズムと継承って単語を並べて使うのが気持ち悪いな
多態性と継承か、ポリモーフィズムとインヘリタンスを使って欲しい
2021/05/30(日) 20:33:04.19ID:borQq+I40
>>119
藪からスティック
2021/05/30(日) 22:58:30.65ID:bQ1dCiB60
>>118
newするたびにコードも複製される勘違いしてる知り合いが、似たような事を言ってたなあ
2021/05/30(日) 23:02:02.71ID:bQ1dCiB60
✘ コードも複製される勘違いしてる
○ コードも複製されると勘違いしてる
2021/05/31(月) 00:13:41.39ID:N0w7o/rO0
でかいクラスってメンバーが多かったりする奴を言ってるのかと思ったけどコードの話なの?
2021/05/31(月) 00:15:18.85ID:W0rzhAw20
Pentium無印で動かしてるかもしれないだろ
2021/06/01(火) 06:28:16.16ID:jX3vW8oh0
jsonの逆シリアル化について教えてください
以下のコードでローカルのjsonファイルを読み込み、逆シリアル化をしてオブジェクトを得たいと考えています

@var readJsonFile = File.ReadAllText(filePath);

Avar jsonDeserialize =JsonSerializer.Deserialize<List<Food>>(readJsonFile);

public class Food{
public string Name{get;set;}
public int Price{get;set;}
}

しかしAの部分が上手く行きません。
変数readJsonFileには所定のjsonファイルの内容を取得出来ているのですが、jsonDeserializeには値が入ってきません。
具体的にはデバッグで変数の中身を確認すると、jsonファイルに記述している項目数だけ要素は取得していますが、Name:null、Price:0の様にファイルに記載しているName等のデータがありません。
エラーなどもなく、何が原因なのか突き止めることが出来ません…。
初歩的な質問で申し訳ありませんがアドバイス頂きたいです。

長文失礼しました。
126デフォルトの名無しさん (ワッチョイ f101-upCQ)
垢版 |
2021/06/01(火) 06:43:19.75ID:H3fSzkBp0
そのjson上げてもらわないと何も回答できないのでは
2021/06/01(火) 07:00:41.85ID:jX3vW8oh0
>>126
申し訳ありません
jsonファイルには以下の様に記述しています

{
"name": "りんご",
"price":100,
},
{
"name": "みかん",
"price":80,
},
{
"name": "バナナ",
"price":90,
}
2021/06/01(火) 07:15:38.78ID:+vEQR5vy0
>>127
シリアライズは出来てるの?
2021/06/01(火) 07:21:03.13ID:+vEQR5vy0
属性とかなんか色々なくね?
必要ないやつとかもあんの?
https://dev.classmethod.jp/articles/c-sharp-json/
2021/06/01(火) 07:28:17.13ID:T5CL49Lw0
全体を[]で囲って配列にすれば、デシリアライズできるんでないの?
2021/06/01(火) 07:54:24.27ID:ILsKj6x4M
>>128
シリアライズは試していません
シリアル化、逆シリアル化はそれぞれ単体で利用出来るものと認識していたのですが、そうではないのでしょうか?


また以下の記事の注釈の箇所を参考にしたのでDataContractJsonSerializerは今回利用していないです
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.serialization.json.datacontractjsonserializer
2021/06/01(火) 09:10:03.91ID:9OJVryW40
JSONもC#も(JavaScriptも)CaseSensitive
NameなんてプロパティJSONに含まれてない
DataContractJsonSerializerだとJSONのcamelCaseとC#のPascalCaseをよろしくやってくれる機能はないんだっけ
ならNameとPriceにそれぞれDataMember属性付けて
[DataMember(Name = "name")] public string Name { get; set; }
みたいにする
2021/06/01(火) 09:16:01.04ID:9OJVryW40
あ、System.Text.Json.JsonSerializer使ってるのか
ならDeserializeの第2引数でPropertyNamingPolicyにCamelCase設定したJsonSerializerOptionsを渡せばいい
2021/06/01(火) 13:01:10.23ID:ILsKj6x4M
>>133
ありがとうございます
PropertyNamingPolicyを指定すると所望の動作をしてくれました

試しに上記の指定をせず、jsonファイル側の要素をname→Name、price→Priceのように大文字にすると読み込む事も確認出来ました
ただ、ファイル側で合わせ込むのは良いやり方ではなさそうなので教えて頂いた方法を使わせて頂きます

大文字と小文字で挙動が変わるのは想像していませんでした
勉強になりました、ありがとうございます
2021/06/01(火) 13:48:21.14ID:oPLrhaHk0
いいってことよ。
2021/06/02(水) 20:02:38.34ID:fQXhEp9r0
form1の中にパネルを貼りそこにformAとformBを追加しました。
追加したformのTextBoxの値ってどう取得するんですか?
2021/06/02(水) 23:11:47.41ID:HCRiwZzS0
>>136
OKボタンを押したときにstring型のpublicメンバ変数にTextBoxの値を入れてCloseメソッドを呼ぶ
呼び出し側のShowDialog的な奴の下でpublicのメンバ変数に入れた値を取得する
2021/06/03(木) 01:34:00.02ID:BJRoM0uaa
>>136
「どう取得するか?」という発想がそもそも間違ってる。
Formから知りたい情報はFormにプロパティとして公開してもらうようにする。
Formというお店の厨房にづけづけ乗り込んで今日のおすすめを
聞き出すようなコードを書いてはいけない。

それとそういう用途には普通はFormじゃなくてUserControlを使う
2021/06/03(木) 19:27:38.16ID:5o+Zn3rd0
質問なんですが
フォルダを監視したいのですがFileSystemWatcherクラスでCreatedイベントを漏らした時の為に
Timer1_Tickでフォルダを定期的に監視し、差分で新しいファイルをあぶり出したいのですが
これだとリネームした時も、新規ファイルだと誤爆してしまいます

こうゆうときCRCでチェックして同一ファイルだと確認するのが一般的なのでしょか?
2021/06/03(木) 19:42:46.99ID:t//U1Ozza
リネームは削除と追加だよ
2021/06/03(木) 20:17:50.85ID:1FWgE7zOM
>>139
CRCより中身比較の方がコスト低くない?
142デフォルトの名無しさん (ワッチョイ 2b10-6ypv)
垢版 |
2021/06/03(木) 20:42:39.32ID:tM/D16b60
FAQっぽいですけど、
pthreadの pthread_cond_* にあたる機能は.netだとどれでしょう?

Mutexは見つけたんですが…。
2021/06/03(木) 20:46:48.63ID:FwOpqBj60
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/ntfs-filesystem-structure/
2021/06/03(木) 20:56:09.09ID:C4Iav00n0
>>141
比較元のデータとしてファイルの中身を丸ごとコピーでもするの?
2021/06/03(木) 21:03:58.18ID:5o+Zn3rd0
>>140
れすさんくすです、ファイルのプロパティみても更新日時が変化するだけで
削除と追加のしっぽをつかまえるのはできませんでした

>>141
れすさんくすです、1個1個のファイルのCRCチェックって確かにやりたくないですね
中身比較って2つのファイル開いてバイナリで比較していくってことでしょか?
2021/06/03(木) 21:27:04.30ID:qi9W3pS/M
えっと、そもそも>>139の前提の
> FileSystemWatcherクラスでCreatedイベントを漏らした時
って、FileSystemWatcherってOSのファイルシステムの機能で動いてるから
少なくとも現在のWindows版の.NETなら起こらないと思ってたんだけど・・・・
本当に漏れるようなことがあるの?
FileSystemWatcherの使い方が間違ってバグってるとかじゃなくて?
2021/06/03(木) 21:57:21.53ID:YfnwbSJk0
>>142
知らんけどAutoResetEvent/ManualResetEventとかそうじゃないの

>>146
少なくともバッファあふれはありうる
現実に起こるかどうかは分からんが
2021/06/03(木) 22:05:51.02ID:5o+Zn3rd0
>>146
ファイルを同時に10個つくったりとか、他に重いアプリあったりしたら
結構取りこぼします、なんとゆう中途半端なクラスだとおもた
2021/06/03(木) 22:08:44.52ID:Ci0sS5ul0
>>142
状態変数が一対ならMonitor.Wait/Pulse
複数ならMunualResetEventSlimをベースに色々使ってがんばれ
2021/06/03(木) 23:47:49.94ID:qi9W3pS/M
>>147,148
であればバッファサイズを大きくすれば解決するんじゃ
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.filesystemwatcher.internalbuffersize?view=net-5.0
と思ったら既定値は8KB、最大でも64KBなのかあ
64KBにしてもとりこぼし一杯ということであればFileSystemWatcherでの監視は実用に耐えないってことになりそうだね
2021/06/04(金) 00:40:20.91ID:4xQVKZkva
FileSystemWatcherほとんど使ったことないけど、ドキュメントを素直に読めば
イベントのバッファを最大にすれば未処理のイベントが4096を超えない限り
オーバーフローは起こらないはず。

本当に取りこぼしなんて起るの?w
何か使い方間違ってへんか

まあ本当に起こると仮定して、ドキュメントには何も書いてないけど
FileSystemWatcherのイベントはたぶん常に同じスレッドからraiseされてるはずで、
であればイベントハンドラでちんたら重い処理をやると当然FileSystemWatcherの
イベントのキューを溢れさせる原因になりうる。

だったらイベントを処理する側もキューを持って、FileSystemWatcherのCreatedイベントハンドラでは
そのキューにFileSystemEventArgsをぶち込んだらすぐに抜けるようにしたら結構改善するんじゃないだろうか?

いや知らんけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況