HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0608
LockCreateFileでファイルのロックがしたい!6未解決


Lock

リンク

2013/6/8(Sat) 19:01:30|NO.54700

CreateFileでファイルのロックがしたいです。
refstrでファイルを指定するのではなくて
C:\Users\User名\Desktop\○○.exe
みたいな感じで最初から指定してファイルをロックしたいのですが
この場合どういったソースを書けばいいですか?

ちなみに下記ソースは拾い物です

#include "kernel32.as"
#define INVALID_HANDLE_VALUE -1
#define GENERIC_READ 0x80000000
#define OPEN_EXISTING 3
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define NULL 0

title "ロックするファイルを選択してください"

dialog "*", 16
if (stat == 0) : end

fname = refstr

// ファイルハンドルを取得する
CreateFileA fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
hFile = stat ; ファイルハンドル
if (hFile == INVALID_HANDLE_VALUE){
dialog "ファイルハンドル取得失敗" : end
}

// ファイルサイズを取得
FileSizeHigh = 0
GetFileSize hFile, varptr(FileSizeHigh)
FileSizeLow = stat
if (FileSizeLow == -1){
dialog "ファイルサイズ取得失敗"
gosub *close
end
}

// ファイルをロックする
LockFile hFile, 0, 0, FileSizeLow, FileSizeHigh
if (stat == 0){
dialog "ロックに失敗しました"
gosub *close
end
}

dialog "OKボタンを押すと開放します"

// ファイルのロックを解除する
UnLockFile hFile, 0, 0, FileSizeLow, FileSizeHigh
if (stat == 0){
dialog "ロックの解除に失敗しました"
gosub *close
end
}

gosub *close

stop
*close
// ファイルハンドルを閉じる
CloseHandle hFile
return



この記事に返信する


test

リンク

2013/6/8(Sat) 20:00:25|NO.54712

ハンドルネームを3つも使い分けるのは大変なので、やめたほうがよろしいのではないでしょうか。

確かにこのソースではrefstrでファイルを指定しています。しかし、CreateFileに渡されている変数はrefstrではないですね。その変数に直接目的のファイル名を入れてしまえばいいと思います。



Lock

リンク

2013/6/9(Sun) 23:16:41|NO.54770

んーあれからかれこれ試したんですが、解決できません><



cats

リンク

2013/6/9(Sun) 23:25:04|NO.54773

え、

fname = refstr
の変数に直でファイル名を入れるだけでは?



Lock

リンク

2013/6/9(Sun) 23:30:12|NO.54774

catsさん

やりましたがなぜかできません;;



test

リンク

2013/6/9(Sun) 23:34:50|NO.54775

できないとは、具体的にどういう状態ですか。
どういうことを試してみて、どういうエラーが出たとか、あるいは何も起きないとか、そういう具体的な情報を提供すれば回答がもらえるかもしれません。



MillkeyStars

リンク

2013/6/10(Mon) 13:17:16|NO.54789

ファイルをロックしたいだけなら、CreateFile 関数の共有のところを共有させないようにすればいい。
ソースの中にある LockFile は、ファイルの一部分をロックする為の物であり、アクセス自体をロックするものではない。

以下、ファイル自体のロック仕方。

#uselib "kernel32.dll" #cfunc CreateFile "CreateFileA" sptr,int,int,int,int,int,int #cfunc CloseHandle "CloseHandle" int #define GENERIC_ALL 0x10000000 #define OPEN_EXISTING 0x00000003 #define INVALID_HANDLE_VALUE -1 onexit *p_end FileName = "d:\\test.avi" fHandle = 0 fHandle = CreateFile(FileName,GENERIC_ALL,0,0,OPEN_EXISTING,0,0) if fHandle = INVALID_HANDLE_VALUE{ mes "ファイルのロックに失敗しました。 } else { mes FileName+" のファイルは、このプログラムを終了するまでロックされています。" } stop *p_end if fHandle != NULL : hr = CloseHandle(fHandle) end



ONION software Copyright 1997-2021(c) All rights reserved.