DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SetEndOfFile関数

環境/言語:[VB.net2003]
分類:[.NET]

VB.net2003にて、Win32APIのSetEndOfFile()がエラーとなってしまいます。VB6ではおとなしく使用できていたのですが。。なにか情報があればとおもい、書き込ませていただきました。実績ある方がいらしゃいましたら、サンプルコードなど教えてください。
■No13740に返信(けーえぬさんの記事)
> VB.net2003にて、Win32APIのSetEndOfFile()がエラーとなってしまいます。VB6ではおとなしく使用できていたのですが。。なにか情報があればとおもい、書き込ませていただきました。実績ある方がいらしゃいましたら、サンプルコードなど教えてください。

これだけの情報では答えられませんよね。
どういうエラーになるのでしょうか?
DllImport 属性部分も提示して頂かないと回答できないと思います。

その前に、System.IO.FileStream.SetLength を使えば済む話だと思うのですが。
どうして、Win32 API 関数を使うことになったのでしょうか?
> これだけの情報では答えられませんよね。
> どういうエラーになるのでしょうか?
> DllImport 属性部分も提示して頂かないと回答できないと思います。
>
> その前に、System.IO.FileStream.SetLength を使えば済む話だと思うのですが。
> どうして、Win32 API 関数を使うことになったのでしょうか?

早々のお返事ありがとうございます。Declare部は以下のように記述しています。
Public Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Integer) As Integer
CreateFileでひろったファイルハンドルを引数に渡していますが、SetEndOfFile の戻り値が0となります。
なぜ、SetEndOfFileを使うことになったかというと、これまでにVB6で作ったソースがあり、それをVS2003のアップデートウィザードにかまし、VB2003の環境で使っています。正直言うと、VB2003はまだはじめたばかりでよくわかっておりません。無理そうなら、別の方法(System.IO.FileStream.SetLength?)も、と考えてはおります。よろしくお願いします。
■No13742に返信(けーえぬさんの記事)
> 無理そうなら、別の方法(System.IO.FileStream.SetLength?)も、と考えてはおります。よろしくお願いします。

むしろ .NET Framework で用意されているものを使うべきだと思いますよ。
  • 題名: 【報告】この投稿はマルチポストです
  • 著者: (報告)
  • 日時: 2005/11/17 2:50:41
  • ID: 13749
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
この投稿はマルチポストです。

●マルチポストされている場所
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1779

----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。

●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html
> むしろ .NET Framework で用意されているものを使うべきだと思いますよ。

もう少し自分で調べて、ダメだったら違う方法を検討したいと思います。解決できれば報告させていただきます。今回は別のことでお騒がせしたようで、管理人の方、申し訳ありません。以後、気をつけます。
■No13751に返信(けーえぬさんの記事)
> もう少し自分で調べて、ダメだったら違う方法を検討したいと思います。解決できれば報告させていただきます。今回は別のことでお騒がせしたようで、管理人の方、申し訳ありません。以後、気をつけます。

とりあえずの回避方法は見つかりました。
SetEndOfFileの前に、SetFilePointerでファイルポインタの位置を変更していたのですが、この第2引数(移動バイト)にマイナスの値を設定すると、SetEndOfFileでエラーになるようです。
(ただし、SetFilePointerの戻り値は正しいファイルポインタの値が返ってました。)
回避方法は、ファイルポインタの移動開始点をファイル先頭にすることで、エラーは出なくなりました。原因はわからないのですっきりしないですが、ご報告まで。


 'ファイルポインタを移動
 'ret = SetFilePointer(hFile, -8, 0, FILE_CURRENT)

 '上の1行を以下3行に変更。
 '現在のファイルポインタを取得。
 fpnt = SetFilePointer(hFile, 0, 0, FILE_CURRENT)
 fpnt = fpnt - 8
 ret = SetFilePointer(hFile, fpnt, 0, FILE_BEGIN)

 'ファイルの終わり(EOF)を、現在のファイルポインタの位置へ移動
 ret = SetEndOfFile(hFile)
  • 題名: Re[6]: SetEndOfFile関数
  • 著者: けーえぬ
  • 日時: 2005/11/17 15:04:09
  • ID: 13756
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
。。。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板