とっちゃんです。
> すっかり忘れていましたが、上記のようなことをOSを判断して行う
> サンプルを作成していました。
> よろしければ、参考になさってみてください。
>
> ■ファイルを再起動時に削除 - for Programmers
> http://www.wac-jp.com/programmers/win32/DeleteFileDelayUntilReboot.html
>
>> 9x系で失敗しているとすると可能性が高いところでは、
>> ショートネームになっていないというのがあるかな。
>> WININIT.INIによる削除処理は16bitコードで行われているので
>> ロングネームではだめというのはついつい忘れてしまいがちです。
>
> よく覚えていませんが、私のサンプルでもショートファイル名にしてますね。
> あと、WritePrivateProfileString APIを普通に使っちゃうとダメです。
> 1つしかファイルがないときはいいんですが、2回目以降、上書きしちゃうんで。
>
合ったんですね。ちゃんと探せよ>おれ(^^;
フムフム...
最後の、フラッシュはなくても大丈夫ですよ(おいらの実装には入ってません)。
あとは、似たり寄ったりですね。
大きな違いは、MoveFileEx が実装されているかは成功するかどうかで
判断しているってくらいかなぁ...
失敗してなおかつ非NT系の場合は WININIT.INI で処理って言う形になってます。<おいらの実装
後は、元独自インストーラのルーチンなのでコピー機能も含まれてるかという違いくらいですね(^^;
WININIT.INI への NUL 追加も同じ段取りです(^^;;
ショートネームの問題は、95 時代の書籍でこのことを書いてあるやつに載ってたと記憶素子が言ってます(^^;
まだ、MS-DOSにいる状態で処理しているから、8.3 じゃなきゃだめよ~んと(^^;
>> HDDに限定してループしている場合は、問題ないかもしれませんが、
>> FindNextFile はある一定の条件を満たすと続きがある場合でも FALSE を返してきますので、
> :
>> としておくとよいでしょう。
>> こうしておけば、途中で止まることなく確実にリストアップできます。
>> これもKBがあるはずです(^^;
>
> HDD内でしか使ってなかったので、知らなかった。。メモメモ。
>
私の記憶が確かなら、HDDでは発生しないはずですが、なにせ、XP出た頃だったかその前
だったかという古い話なので(^^;
それも、KB出た当初はあまりはっきりした情報がわかってなくて、なんだかわからんけど
見たいなノリだったし(^^;
確か、最終更新でショートネーム生成ロジックが9文字以上を吐き出すバグが原因って
出ていたような...(でも直せないから、GetLastError()で確認してねって...)。
なにせ、今じゃ、::FindNextFile( ... ) || ::GetLastError() == ERROR_MORE_DATA って書くのが
体に染み込んじゃってますので(^^;
どこなら気にしなくてもいいというのは全く考慮してません(^^;;
> すっかり忘れていましたが、上記のようなことをOSを判断して行う
> サンプルを作成していました。
> よろしければ、参考になさってみてください。
>
> ■ファイルを再起動時に削除 - for Programmers
> http://www.wac-jp.com/programmers/win32/DeleteFileDelayUntilReboot.html
>
>> 9x系で失敗しているとすると可能性が高いところでは、
>> ショートネームになっていないというのがあるかな。
>> WININIT.INIによる削除処理は16bitコードで行われているので
>> ロングネームではだめというのはついつい忘れてしまいがちです。
>
> よく覚えていませんが、私のサンプルでもショートファイル名にしてますね。
> あと、WritePrivateProfileString APIを普通に使っちゃうとダメです。
> 1つしかファイルがないときはいいんですが、2回目以降、上書きしちゃうんで。
>
合ったんですね。ちゃんと探せよ>おれ(^^;
フムフム...
最後の、フラッシュはなくても大丈夫ですよ(おいらの実装には入ってません)。
あとは、似たり寄ったりですね。
大きな違いは、MoveFileEx が実装されているかは成功するかどうかで
判断しているってくらいかなぁ...
失敗してなおかつ非NT系の場合は WININIT.INI で処理って言う形になってます。<おいらの実装
後は、元独自インストーラのルーチンなのでコピー機能も含まれてるかという違いくらいですね(^^;
WININIT.INI への NUL 追加も同じ段取りです(^^;;
ショートネームの問題は、95 時代の書籍でこのことを書いてあるやつに載ってたと記憶素子が言ってます(^^;
まだ、MS-DOSにいる状態で処理しているから、8.3 じゃなきゃだめよ~んと(^^;
>> HDDに限定してループしている場合は、問題ないかもしれませんが、
>> FindNextFile はある一定の条件を満たすと続きがある場合でも FALSE を返してきますので、
> :
>> としておくとよいでしょう。
>> こうしておけば、途中で止まることなく確実にリストアップできます。
>> これもKBがあるはずです(^^;
>
> HDD内でしか使ってなかったので、知らなかった。。メモメモ。
>
私の記憶が確かなら、HDDでは発生しないはずですが、なにせ、XP出た頃だったかその前
だったかという古い話なので(^^;
それも、KB出た当初はあまりはっきりした情報がわかってなくて、なんだかわからんけど
見たいなノリだったし(^^;
確か、最終更新でショートネーム生成ロジックが9文字以上を吐き出すバグが原因って
出ていたような...(でも直せないから、GetLastError()で確認してねって...)。
なにせ、今じゃ、::FindNextFile( ... ) || ::GetLastError() == ERROR_MORE_DATA って書くのが
体に染み込んじゃってますので(^^;
どこなら気にしなくてもいいというのは全く考慮してません(^^;;