私はTim Goldenのwin_filesummary.py(これは非常に良い)を成功させて使用しています。私は、プロセスを逆にして文字列をコメントプロパティに設定する方法を理解しようとしています。私は適切な値=>(IID( '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}')6)を持っていますが、それを得るだけでなく、コメントの設定方法を理解するのが難しいです。 win_filesummary.pyPython 3.5を使用してWindowsのSummaryInformationプロパティを保存/設定します
私はオンライン何かを見つけることができませんので、いくつかの検索の後、私はSOのbraintrustを選ぶだろうと思った:
ティムのファイルへのリンクがあります。
ありがとうございます。
~~~~~~~~~~~~~~~~~~~~~ 更新:
はまだ調査中、と近づいて。
要するに、ファイル(通常はjpg)を新しい場所に新しい名前でコピーしようとしています。私は元のファイル名を新しいファイルのコメントセクションに置きたいと思っています(ファイル名の中には有益な情報があります)。
コピーは正常です。
def setCommentProperty(self, filepath, comment):
try:
m=storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE
pss=pythoncom.StgOpenStorageEx(filepath, m, storagecon.STGFMT_FILE, 0 , pythoncom.IID_IPropertySetStorage)
'''
pssum=pss.Create(pythoncom.FMTID_SummaryInformation,
pythoncom.IID_IPropertySetStorage,
storagecon.PROPSETFLAG_DEFAULT,
storagecon.STGM_READWRITE|storagecon.STGM_SHARE_EXCLUSIVE)
#storagecon.STGM_READWRITE|storagecon.STGM_CREATE|storagecon.STGM_SHARE_EXCLUSIVE)
'''
pssum = pss.Open(pythoncom.FMTID_SummaryInformation, m)
pssum.WriteMultiple([storagecon.PIDSI_COMMENTS],[comment])
pssum=None
pss=None ## doesn't seem to be a close or release method, and you can't even reopen it from the same process until previous object is gone
except pythoncom.com_error as e:
print (e)
print (vars(e))
print (e.args)
hr,msg,exc,arg = e.args
===結果===
Old:f:\pictures\pythontest\dsc_0003.jpg ==> New: F:\Pictures\PythonTestTarget\2010\2010-05\TEST-2010-05-09-18-59-24.jpg
(-2147287038, 'STG_E_FILENOTFOUND', None, None)
{'excepinfo': None,'argerror': None, 'hresult': -2147287038, 'strerror':
:私は、非常に最後の文まで、以下のコードをステップ(:https://github.com/kovidgoyal/pywin32/blob/master/com/win32com/test/testStorage.py私はで見つけテストスクリプトの内部にこのスニペットを見つけました) 「STG_E_FILENOTFOUND」} (-2147287038、「STG_E_FILENOTFOUND」、なし、なし)
私は、これはopen関数は、ファイルのプロパティの概要情報部分を見つけることができないことを私に言っていると思います。もちろん、jpgであることは確かに存在します。エクスプローラを使用してファイルのプロパティをチェックしましたが、そこにあります。
変数pssは問題なく、PyIPropertySetStorageオブジェクトです。 FMTID_SummaryInformationも正しいと思われます(Microsoftの情報であるpythoncom.FMTID_SummaryInformation = IID( '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}'))。
上記のCreateメソッドのコメントコードは例外を返しませんが、コメント文字列の変更も作成しません。
要約情報のプロパティが見つからない理由は誰でも知ることができます。そうでなければ、私はどのように物件に書き込んで目標を達成できるのですか?再び予め
おかげで、 B.
~~~~~~~~~~~~~~~~~~~~~また更新(2017年7月22日):
サガは継続する(と私はまだバッフル付きです):
import os, sys
import pythoncom
import shutil
from win32com.shell import shell
from win32com import storagecon
if __name__ == '__main__':
orig_filepath = "F:\Pictures\PythonTest\DSC_0003.jpg"
new_filepath = "F:\Pictures\PythonTestTarget\CopiedFile.jpg"
comment = "This is a test comment"
try:
destination = shutil.copy2(orig_filepath, new_filepath)
m=storagecon.STGM_READWRITE | storagecon.STGM_SHARE_EXCLUSIVE
pidl, flags = shell.SHILCreateFromPath (os.path.abspath (new_filepath), 0)
property_set_storage = shell.SHGetDesktopFolder().BindToStorage (pidl, None, pythoncom.IID_IPropertySetStorage)
property_storage = property_set_storage.Open (pythoncom.FMTID_SummaryInformation, m)
property_storage.WriteMultiple([storagecon.PIDSI_COMMENTS],[comment])
except pythoncom.com_error as e:
print (e)
print (vars(e))
print (e.args)
hr,msg,exc,arg = e.args
コードファイルをコピーし、その後の試み:私は私の検索を促進するため、最小限のスクリプトにコードを絞り込むまし
新しいファイルコピーにコメントを追加します。
結果は以下のとおりです。
(-2147287035, 'Access Denied.', None, None)
{'hresult': -2147287035, 'excepinfo': None, 'strerror': 'Access Denied.', 'argerror': None}
(-2147287035, 'Access Denied.', None, None)
The thread 'MainThread' (0x2de0) has exited with code 0 (0x0).
The program '[11388] python.exe' has exited with code 0 (0x0).
誰もが、これは「アクセス拒否」例外が生じているものの任意の手掛かりを持っていますか? B.私はなく、任意の満足のいく方法で、私の問題を解決し