- PR -

フォルダアクセス権限によるエラー回避方法

1
投稿者投稿内容
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-07-30 09:52
こんにちは。

VBAでサーバにファイルを書き込みに行きます。
セキュリティ強化のため、フォルダに対する権限が
 新規ファイル作成可
 ファイル削除不可、
 ファイル変更不可
に変更されました。
当初、FSOを使って直接サーバに書き込んでいたのですが権限の変更によって、権限がないというエラーになりました。
そこでローカルにいったん作ってから、FileColpyでファイルを作成するようにしたのですが、それでもエラー。
今はOn Error を使っています。
どうもファイルコピーでもOSとしては
ファイルを作成する->ファイルを開く->バッファの容量ずつ追加書き込みする->ファイルを閉じる
という流れになっているようで、どうしてもエラーが出てしまうようです。
On Error にしたのは、FileCopyでエラーになっていてもファイルは作成され、中身もコピーされていたからです。
APIのコピー(アニメーションがでる)を使ってもエラーになり、この場合はファイルは作製されても中身はコピーできませんでした。

On Error を使った回避方法以外の方法はありますか?

 
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-07-30 23:39
Win32 CopyFile function もコケますね。

WMI CIM_DataFile class の Copy Method だといけるようです。

コード:

Dim objWmiObject As WbemScripting.SWbemObject
Dim strSourcePath As String
Dim strWmiPath As String
Dim strDestPath As String

strWmiPath = "winmgmts:\\.\root\CIMV2:CIM_DataFile.Name=""" _
& Replace(strSourcePath, "\", "\\") & """"
Set objWmiObject = GetObject(strWmiPath)
objWmiObject.Copy strDestPath



[追記]できたと思ったら cancel されてる。。。

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2008-07-30 23:44 ]
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-07-31 11:37
回答ありがとうございます。

試してみたのですが、エラーは出なかったけどコピーできてませんでした。

参考になるかわかりませんが、以下の操作でもエラーになります。
(1)メモ帳を開く。何かしらテキストを入力
(2)名前をつけて保存 で、新規作成可・更新不可のフォルダを指定する。
(3)「<ファイルフルパス名> は既に存在します。上書きしますか?」とメッセージ。
(4) はい で「ファイル<フルパス名> を作成できません。パスおよびファイル名が正しい確認してください。」となってファイルは作れても、中身が空になってしまう。


WMI CIM_DataFile class の Copy Method でも、ローカルで成功するパスと成功しないパスがあるみたいです。
D:\Temp 直下で失敗。 D:\Temp\etc\ で成功。

On Error での回避が楽だなぁ。なんか怖いけど。
1

スキルアップ/キャリアアップ(JOB@IT)