2017-07-13 9 views
0

私は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.私はなく、任意の満足のいく方法で、私の問題を解決し

答えて

0

:もう一度

は、事前にあなたに感謝します。

これで、jpegファイルのコメントフィールドにテキストを追加できるようになりました。これは今のところ動作しますが、私が望むほど一般的ではありません。

私が見つけた解決策は、パッケージ「piexif」を使用することでした。それは非常にうまくいって、宣伝されていました。それは素晴らしいツールであり、私の目標を達成するのに役立ちました。

私はまだ、上記の「アクセス拒否」問題の解決方法を探し出すつもりです。 Python経由でコピーされたファイルに読み取り専用の問題がなく、問題のない属性/プロパティ/メタデータをステップ実行できるのは、アクセスしようとすると「アクセスが拒否されました」という結果になりますそのメタデータに書き込む。

誰かがこれを読んで答えを出すことができれば、私はそれを聞いてみたいです。

これを読んで、それについて考えてみてください。

B.

関連する問題