トップページ⇒tech
1001コメント290KB

Win32API質問箱 Build47

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/13(月) 08:56:12
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0643デフォルトの名無しさん2006/12/03(日) 23:52:05
>>642
日本語でおk

とりあえず、セクタサイズは通常512byte、MOとかDVD-RAMとかで2KBの場合あり。
4KBなんてものは普通はないが。
06446422006/12/04(月) 00:07:29
>>643
すみません
セクタサイズではなくクラスタサイズでした
MSDNには、FILE_FLAG_NO_BUFFERINGフラグを指定した場合
書き込み&読み込みサイズと、バッファーのアドレスと、ファイルの書き込み&読み込み開始位置が
ディスクのクラスタサイズと一致してなければいけないと書いてありました。

そのため、クラスタサイズが4KBのディスクに1001KBのファイルを作ろうとすると
最後の1KBが書き込めなくなってしまうので

1、FILE_FLAG_NO_BUFFERINGを諦める 
  (このフラグを指定すると非同期書き込みのパフォーマンスが上がると書いてあったので、できれば諦めたくない)
2、一度ファイルを開き直してから書き込む
  (わざわざ開き直すのは面倒でスマートではない気がするので、他にいい方法があるなら避けたい)

この二つ以外に方法は無いのかと思って質問させていただきました
0645デフォルトの名無しさん2006/12/04(月) 00:07:50
アロケーションユニットサイズのこと?
0646tsurarete yarou.2006/12/04(月) 00:15:50
>>642
やったことないのでおおはずしかもしれないが、ダミーで埋めて 1004KB まで
書き込んでから、SetFilePointer() と SetEndOfFile() で余分なところを切
り捨てるんじゃだめ?
0647デフォルトの名無しさん2006/12/04(月) 00:19:07
>>644
セクタサイズ単位のはずだが。
0648デフォルトの名無しさん2006/12/04(月) 00:21:18
つーか、そんな小細工したってしなくたって、メディアの速度は変わらないよ。
0649デフォルトの名無しさん2006/12/04(月) 00:28:13
書き込みの境界さえあってれば、サイズは可変でいけた気がする。
ちなみに、大抵の場合パフォーマンスが低下するので使用はお勧めしない。
■ このスレッドは過去ログ倉庫に格納されています