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

■ このスレッドは過去ログ倉庫に格納されています
2023/03/26(日) 07:31:00.51ID:2LMOL5Ty0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part157
https://mevius.5ch.net/test/read.cgi/tech/1669349768/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・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
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/05/08(月) 13:04:12.03ID:h5IiweHd0
using制御しかしてないわ
2023/05/08(月) 13:11:33.93ID:x7lJRSufd
>>439-441
>>429はWidows Defenderのせいにして終わってるから
納得できる形で解決してみせてよ
2023/05/08(月) 13:27:23.81ID:Rh3bbmbap
>>442
非同期なら当たり前に発生するなw
2023/05/08(月) 13:29:30.54ID:QcInbmeDM
ファイルを閉じるから横取りされるんだぞ
2023/05/08(月) 13:38:05.76ID:TxJAG0JMd
今回みたいなケースでファイルクローズ直後にファイルいじろうとすると使用中の様な警告出ることあるから
基本的にリトライするようなコード入れてるけどそんなことないのかね
2023/05/08(月) 13:53:31.24ID:xSxPowKip
OS側の処理も非同期なんだと予想
2023/05/08(月) 15:24:20.83ID:NYRttg47d
いちいちリトライなんか仕込んてたらハゲそう
イラネーヨって言ってくれ
2023/05/08(月) 23:17:00.86ID:n3psyKuA0
>>440
IDisposableを継承しているのにクローズしなかったら使い物にならないだろ。

例えばFileStreamクラスのDispose()には、
Stream によって使用されているすべてのリソースを解放します。
とあるので、当然Closeもする。
2023/05/08(月) 23:18:14.32ID:n3psyKuA0
あ、継承じゃなくて実装だ。
2023/05/09(火) 04:40:15.34ID:fisd8t0i0
Disposeの処理の中でClose普通に呼んでたはず
ソース見りゃ分かるやろ
2023/05/09(火) 04:54:39.15ID:b+hc+8Ui0
>>450
>>440が「そんな実装頼みの」って言ったので、あえてソースを見ずにドキュメントの内容で答えた。
2023/05/09(火) 07:21:46.18ID:2h4Q3q9eM
asyncawaitに対応してない何かがあるのかもな
2023/05/09(火) 08:53:33.61ID:F+qDabIr0
自作じゃない.NET純正で、Taskを返す〇〇Asyncメソッドがasyncawait対応してないは無いでしょ
2023/05/09(火) 10:25:27.81ID:wTiHbcrZp
だから、OSだって非同期にファイル処理してるんだろ?
で、完了通知なんて受けて無いw
2023/05/09(火) 11:26:49.94ID:TDrxScizd
C#のファイル操作が遅いからファイルコピーと属性変更との間にWindowsDefebderが割り込んでスキャンされて妨害されるのかもしれない
知らんけど
2023/05/09(火) 11:28:32.40ID:LwvaBWbia
>>455
win32apiを使ってるのでさすがにそれなはい
削除してもすぐにファイルが消えないのはあるあるだからリトライするのが定番
457デフォルトの名無しさん (オッペケ Src7-iqBk)
垢版 |
2023/05/09(火) 11:46:04.35ID:vAJE1vUCr
とはいえ
頻度は10回に1回あるかないか程度
Windows Defender 無効にしたら例外が発生しなく
なら妥当かもしれない
2023/05/09(火) 16:21:49.31ID:GXFqLAgP0
>>429
これ閉じる前にFileStream.SafeHandle使ってSetLastWriteTime(SafeFileHandle, DateTime)のオーバーロード使うのはどうなの?
2023/05/09(火) 20:43:33.82ID:ZCATFg/N0
質問なんですが
formのbutton1.textをテキストボックスから取得したいのですが、
テキストが長い場合、ボタンのテキストが改行されてしまいます

表示が後半隠れてしまうのは別に構わないのですが、
改行がおこるとテキストがボタンの上側に移動してしまいます
button1.textを改行しないようにできないでしょうか?
2023/05/09(火) 22:36:11.30ID:ZhePtJGs0
ボタンのPaintイベントで自前描画すればOK
2023/05/09(火) 22:41:53.48ID:U2HEifZi0
button1.AutoEllipsis = true;
2023/05/10(水) 10:41:28.62ID:B1N+exWkM
どなたか教えてくださいC#です
public class Person
{
public Name Name { get; set; }
}
public class Name
{
public string NameText { get; set; }
}
こういうクラスがあったとして、

var p = new Person
{
Name = {},
};
Console.WriteLine(p.Name);
これはnullが出力されるんですが、構文解析時のName={}の右辺はどういう評価をされてるんでしょうか?
また
var p = new Person
{
Name = {NameText=""},
};
これもコンパイルは通りますが実行時にObject reference not set to an instance of an object.で落ちます
Name = {NameText=""},
の{NameText=""}は構文解析時にどういうモノとして扱われてるんでしょうか?
本来はName= new Name{NamText=...}とするところで、new {クラス名}を書き忘れたらビルドが通っていたのでなんだろうと思った所存です
2023/05/10(水) 11:20:13.56ID:iQXLAALm0
オブジェクト初期化子
1つ目のケースは初期化するプロパティがないので何もしない
2つ目のケースはこれと同じ意味になる
var p = new Person();
p.Name.NameText = "";

https://ufcpp.net/blog/2016/12/tipsobjectinitializer/
2023/05/10(水) 11:21:23.96ID:tkTpg3dz0
>>460
レスありがとう、Paintイベント追加で自力でやるのはけっこう大変そうですね

>>461
ありがとう、...省略はできたけど、文字は上側に寄ったままでした

button1.Padding.Topに4ぐらいいれたら解決しました
2023/05/10(水) 11:27:39.61ID:NYVeTygZM
>>463
なるほど!ありがとうございます!
いやーこれはコンパイル時に落としてほしい…
2023/05/10(水) 11:28:45.20ID:qs6QvCEc0
Formsで独自描画はバッドノウハウに近いと思う 
スケーリング考慮してないのばっかり
2023/05/10(水) 13:49:34.03ID:iQXLAALm0
>>465
AのコンストラクタでNameがnewされてたら問題ないわけだし使い分けでしかないね
nullableを有効化しとけばこのケースだとAのNameがnull許容でもnull非許容でも警告出してくれるよ
468デフォルトの名無しさん (ワッチョイ c23d-Lyct)
垢版 |
2023/05/10(水) 14:23:44.58ID:6sAnxqBz0
C#でASP.NETでHTMLコード書くにはどこいじればいいの?
469429 (ワッチョイ 9354-ouLR)
垢版 |
2023/05/10(水) 17:05:27.60ID:QPN4FwhI0
私にとっての解決後も議論があったようですが、
Windows Defender を無効化 ( Windows Defender の [除外] に、コピー先フォルダを登録する ) してから、1回も発生していません。
for(int i = 0; i < 100; i++){}
での 100回ループテストを何度か行っても発生していないので、自分の中では解決済みになっています。
2023/05/10(水) 18:11:17.94ID:rAs2Y7NDp
ファイル内容変更したからウイルスチェックが走ってんじゃん
ってオチかよw
2023/05/10(水) 18:54:24.51ID:6aE3wdSe0
オチかよも何も、最初からそういう話だったのに
DisposeがちゃんとやってないんだろとかOSの遅延がうんたらとか頭でっかちが騒いでるだけやで
2023/05/10(水) 18:59:46.60ID:KHK6MiQv0
asyncawaitってスレッドセーフのメソッドじゃなくても使っていんだっけ?
2023/05/10(水) 19:16:24.65ID:PlKEk/pSa
>>456で結論書いてやったのにまだやってたのか
2023/05/10(水) 19:57:37.80ID:n33wvc2tp
>>473
全く結論になって無いよあれ
単なる対症療法なだけだろw
2023/05/10(水) 20:01:05.91ID:PlKEk/pSa
その対症療法が唯一の治療法なんだがまだそれもわからないのかよw
2023/05/10(水) 20:03:31.18ID:PlKEk/pSa
リソースを占有できるのがそのスレッドだけではない場合
つまり今回と同様の場合だな
原因がセキュリティソフトかバックアップソフトか何かは全く関係ない
時間を置いて何度かリトライしてそれでもだめなら例外を投げる
基本中の基本だぞ?
2023/05/10(水) 20:19:03.60ID:QPN4FwhI0
議論再燃させて申しわけありません。
消えます。
2023/05/10(水) 21:49:28.98ID:KHK6MiQv0
みんな参加できるし
いい内容だと思う
2023/05/10(水) 22:26:34.42ID:6aE3wdSe0
>>1
> 議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
2023/05/10(水) 23:13:27.93ID:qs6QvCEc0
>>475,476
今回の場合(>>429)は、ファイルを一旦解放するのが問題なんだから、>>458の方法で上手く行くでしょ
2023/05/10(水) 23:27:09.51ID:qs6QvCEc0
ファイル削除のことならリトライは必要だけど、今回のと関係ないね
2023/05/10(水) 23:39:29.79ID:+U2L2taI0
てか、ファイル操作するのに、排他しなきゃだよな?
一度手放したら他のプロセスに横取りされちゃうだろ
2023/05/10(水) 23:54:07.74ID:of34847N0
もう一度再現させた上でロックしているプロセスが本当にWindows Defenderだったのか確認しない限り不毛な議論では?
2023/05/11(木) 02:59:54.64ID:YOUU3VFS0
っていうかどうしたいんだろ
コピー後のファイルを
誰かがつかんだままにすれば
似たようなエラーはいつでも
起こせるし起きちゃうじゃん

それがこのアプリにとってレアケースでないなら他アプリがつかんだママのときの動作を仕様で定義するべきだと思う
2023/05/11(木) 03:21:28.69ID:rPH4vL1P0
>>484
>>429のソースを見るに、ファイルの最終書き込み時刻を保ったままコピーしたいんでしょうよ

コピー先のファイル作成とタイムスタンプ操作を1回の排他モードオープン〜クローズの間にまとめてやれば
他のプロセスに割り込まれようが無いし、その後につかまれてもやること終わってるから問題無い
2023/05/11(木) 08:30:37.64ID:deoSAjL+a
>>481
今回のセキュリティーソフトわ切るやり方こそ対症療法だろw
2023/05/11(木) 10:12:30.60ID:NldGOlLod
>>458
これ知らなかったんだけど、実際に存在する?
コード書いてもでてこないんだけど
ちなみにGetLastWriteTime はあるようだ
2023/05/11(木) 10:37:35.73ID:rPH4vL1P0
>>487
.NET7で追加された
.NET6以前はP/InvokeでWin32API使えば同等のことは出来るけど時刻の扱いが面倒臭いね
2023/05/11(木) 10:44:53.88ID:ihHVpLbGp
そもそもファイルのタイムスタンプを合わせる仕様が本当に必要なのか小一時間
2023/05/11(木) 10:54:15.13ID:NldGOlLod
>>488
thx
>>489
他人の仕様にケチ付けちゃだめ
2023/05/11(木) 11:24:35.10ID:ihHVpLbGp
タイムスタンプなんて危ういものを何に使おうってんだ?
生成時刻が重要ならファイル名に組み合わせしまうとか
他の方法の方がよっぽど確実だぞ
2023/05/11(木) 12:16:13.48ID:RpUziWGf0
DateTime.ToFileTimeみたいな関数あったはずだからWin32利用したら案外簡単
2023/05/11(木) 12:31:50.44ID:NldGOlLod
コードも提供せずにこういうことやりたいと言ってるわけでもないし、
今回問題となっている部分についてだけで話すればいいんじゃないの
質問者が他のやり方ないですかみたいな質問ならまだしも
回答者が勝手に仕様かえて変な回答しないほうがいいと思うなぁ
2023/05/11(木) 12:45:05.52ID:OsVl9AaP0
俺は基本更新時刻の新しい順で並べるからファイルやフォルダのコピーごときでファイルスタンプは変わって欲しくないな
495デフォルトの名無しさん (ブーイモ MMdb-vs1K)
垢版 |
2023/05/11(木) 12:56:38.62ID:CPAv1ED5M
コピー元のタイムスタンプを維持したいユースケースなんていくらでもあると思うんだけどな
cp -pのように最初からそういうオプションが用意されてないのが不思議なくらい
2023/05/11(木) 13:00:19.05ID:8tWYoMH60
>>491
お前の考えなど知らん
コピー先のファイル名はそのままである必要があるんだよ
2023/05/11(木) 13:03:05.25ID:azf3P6SKM
あれ、File.Copy()でコピーすればファイルの更新時刻とかはコピー元ファイルのままだと思ってたんだけど、違うの?
わざわざLastWriteTimeを転記する処理なんか不要じゃないかな
2023/05/11(木) 13:20:41.79ID:YOUU3VFS0
結局なんで死んでんだっけ?
スレッドセーフじゃないメソッド呼んでたから?
2023/05/11(木) 13:22:58.00ID:Kl8HQqiW0
FileStreamを開放したところでDefenderに掴まれてるから
500デフォルトの名無しさん (ワッチョイ 927f-Ujgo)
垢版 |
2023/05/11(木) 13:26:07.70ID:IsUfqIsW0
>>470
ノートン先生が毎回俺がコンパイルしたexe没収しやがるのな
2023/05/11(木) 13:28:13.33ID:/kketneYM
gdriveの横槍でvsのビルド失敗しやがるからな
2023/05/11(木) 14:04:15.95ID:/lX/zRJGp
>>496
だからファイル作成時刻が重要ならタイムスタンプに頼る様な仕様は事故のもとだから仕様から考え直さないと後で泣くのはおまえさんとこだって話だw
503デフォルトの名無しさん (ワッチョイ 927f-Ujgo)
垢版 |
2023/05/11(木) 14:06:17.73ID:IsUfqIsW0
ファイルの作成時刻が大事で、ファイル名も変えたくないなら
実データの内に時刻もっておいて逐次参照するしかないか
2023/05/11(木) 14:15:18.91ID:5HC1/c5B0
タイムスタンプをバージョン番号にするのが一時流行ったな
2023/05/11(木) 14:18:46.36ID:NldGOlLod
>>497
コード提供部分にはない仕様でコピー中の進捗管理もしたいからブロックコピーみたいな事したいんじゃないのと思ってるけどね
2023/05/11(木) 16:32:36.54ID:Kl8HQqiW0
ファイルコピーツールでタイムスタンプ類もそのままって普通のことでは?
2023/05/11(木) 16:59:27.45ID:OsVl9AaP0
そうだよ
その当然のことがC#だとなぜか上手くいかないねってマヌケな話を続けてるのよ
2023/05/11(木) 17:30:13.71ID:Kl8HQqiW0
違うよ、Defenderに割り込まれて失敗してただけなのに、C#が悪いとか実装だよりがうんたらとか明後日の話してるだけ
あとなぜかタイムスタンプ同期を敵視するおかしな輩
2023/05/11(木) 17:43:23.58ID:rQf2HOBdp
タイムスタンプって言えば、マイナンバーの他人データ事件
510デフォルトの名無しさん (アウアウエー Saaa-tcUg)
垢版 |
2023/05/11(木) 20:37:45.66ID:WmrOv4hCa
asp.net 7.0/razorでTest.razorファイルを作って中身を
@page "/test/{text}"
<h1>Hello, world!</h1>
とすると、http://localhost/test/aaaaaaaは期待通りTest.razorにアクセスするんだけど
http://localhost/test/ にアクセスしようとするとエラーページ(app.razorの<NotFound>)に飛んでしまいます
エラーページに飛ばずにTest.razorに導くにはどうしたらいいのでし
2023/05/11(木) 20:50:19.55ID:WmrOv4hCa
自決。重複指定できるんだね
@page "/test/{text}"
@page "/test/"
2023/05/12(金) 05:08:25.71ID:wvdezX0Z0
ループしつつ例外来たらリトライぐらいしかないんだな
ファイルアクセスって
2023/05/12(金) 06:06:11.81ID:knxa7qRm0
絶対に他のプロセスがアクセスすることが無いファイルでもなきゃそうだろうね
2023/05/12(金) 10:06:17.76ID:6p7rgQrNp
一度握ったら離さない様にすれば良いだけ
まあ、握るまで待つ事はあるだろうけどさ
2023/05/12(金) 10:09:45.59ID:6p7rgQrNp
ファイルロックくらいしろって事でFA
2023/05/12(金) 20:52:48.39ID:QyvjIFa10
タイムリーな話題

Microsoft Defender がファイルコピー速度を大幅に低下させるというテスト結果
https://security.srad.jp/story/23/05/11/212256/
2023/05/13(土) 11:11:48.89ID:tW4K4KGI0
当たり前の話じゃないの?
アンチウイルスって実行ファイルの中身チェックするのが仕事なんだし
2023/05/13(土) 12:02:01.86ID:7xfulSMu0
>>517
コピーされるファイルも実行ファイルの中皆の?
2023/05/13(土) 12:58:27.54ID:WLwqntQA0
別にチェックするのは実行ファイルだけじゃ無い
基本的には全部

拡張子変えて実際は実行ファイルって場合も有る

特殊な方法で画像や音声ファイルに別ファイルを入れる事も出来る
普通に開いても画像や音が流れるけどやけにファイルサイズ大きい
2023/05/13(土) 14:46:09.37ID:mZrGEceU0
除外指定されてないもの全部検査対象だよな
2023/05/13(土) 15:08:50.76ID:xlpBDV6S0
んでウィルスでもないものも消していってくれるし
2023/05/14(日) 08:52:03.33ID:kc3awa8x0
>>428
非同期I/Oについて以前別件で調べていたページをブラウザで開いたまま放置してて、
そこを読んだら、
・FileStreamは~Async()メソッドを呼ぶだけだと、同期メソッドをTask.Runしているイメージと同じ
・非同期IOにするには、FileStreamのコンストラクターでuseAsyncをtrueにする
とあった。
2023/05/14(日) 11:04:56.63ID:8prSF4JO0
そもそもIOって物理的に非同期にできんのかな?
って疑問はある
ファイル名(パス)を変更するとして
それが既存と被らないことをチェックするためには
HDD全部が排他対象になっちゃうと思うんだけど・・・?

世の中には頭のいい人がいるからな
Windowsもうまいことなってるのかもしれん
2023/05/14(日) 11:24:11.66ID:C7+mn9jn0
アホすぎる
基本情報技術者試験からやり直せ
2023/05/14(日) 11:25:33.88ID:YHEEjM6QM
>>524
マジで?載ってる?
2023/05/14(日) 11:30:50.36ID:cZZGCVt9M
FileStreamの~Async()メソッドの話をしているのに
ファイル名を変更する話をし始める人
2023/05/14(日) 13:29:51.43ID:8prSF4JO0
>>526
あ、そっか
やっぱりそこは
どうにもならねえんだよな
2023/05/14(日) 13:35:41.81ID:8prSF4JO0
まずIOいじるときは
プロセスセーフである必要があって
それをサポートするAPIはないと
次にスレッドセーフである必要も
あってそこはAPIがあるのと
プロセスセーフの仕組みに載せてしまってもよい
みたいな?
2023/05/14(日) 15:32:18.00ID:cBUUr2ypd
別に考えるのは悪いことじゃないけどここで書くような事か?
チラシにでもかけよ
2023/05/14(日) 16:46:00.64ID:AbKJzFQD0
>>523
出来るも何もむしろ必須レベル
正常なディスクであればファイルIOは即終わるが壊れかけとかだとめちゃくちゃ時間かかる事もある
要するに完了時間は不定だから多数に公開しようとしたらファイルIOはWin32のオーバーラップを利用した非同期化は必須
C#であれば手軽に使えるasync版もあったはずだが
2023/05/14(日) 18:25:49.02ID:8prSF4JO0
>>530
なんかごちゃごちゃうっせーけど
OSとAPIに任せて勝手にやってくれるわけではないよね?
2023/05/14(日) 19:42:00.49ID:LqBBoBzl0
やってくれてなかったらOSもプロセスもディスクアクセスのたびに死んでるわ
2023/05/14(日) 21:25:59.89ID:8prSF4JO0
>>532
だから死んでるじゃん
エラー出して
ハンドリングはしてないよね?
2023/05/14(日) 21:34:27.06ID:pb1Dbmn7M
スレ伸びてるなと思ったら荒れてたのか
スルーしたほうがいいのかな?答えたほうがいいのかな?
2023/05/14(日) 23:37:37.55ID:LqBBoBzl0
ハンドリングしてるからエラー出せるんだろうに
2023/05/14(日) 23:52:11.86ID:TlAvKTIL0
デバイスとファイルシステムの区別が付いてないし基本的な知識が欠けてる
相手にするだけ無駄かと
スレチだし
2023/05/15(月) 01:10:46.89ID:LL0MvYiW0
まあふらっとだしC#にかかわる範囲で答えてやれば良いとは思うが

そもそも>>523は非同期IOってどんなもんだと思ってるんだ
2023/05/15(月) 03:01:17.91ID:MbkFonvu0
>>535
プロセスセーフにはならないってことだよね
2023/05/15(月) 03:14:56.69ID:MbkFonvu0
streamreaderwriterで死ぬってことはOSの機能じゃなくて
あくまでアプリ側がそう組んだからそう動くってことでおk?
2023/05/15(月) 10:50:41.17ID:pV2Ms8mh0
>>531
勝手にやってくれない?
お前はDeviceIOControlでも利用して一々マニュアルでハードウェア制御してるのかよ
普通に全部勝手にやってくれるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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