1

WindowsXPのアーカイブに異なるアクセス許可のファイルでディレクトリをバックアップする関数を書き込もうとしています。tarfileモジュールを使用してディレクトリをtarします。現在、プログラムが読み取り権限のないファイルを検出するとすぐに、エラーの発生を停止します。IOError:[Errno 13]権限が拒否されました:'ファイルへのパス'。代わりに、tar操作を終了するのではなく、読み取ることができないファイルをスキップするようにしたいと思います。これは私が今使っているコードです:

def compressTar():
 """Build and gzip the tar archive."""
 folder = 'C:\\Documents and Settings'
 tar = tarfile.open ("C:\\WINDOWS\\Program\\archive.tar.gz", "w:gz")

 try:
  print "Attempting to build a backup archive"
  tar.add(folder)
 except:
  print "Permission denied attempting to create a backup archive"
  print "Building a limited archive conatining files with read permissions."

  for root, dirs, files in os.walk(folder):
   for f in files:
    tar.add(os.path.join(root, f))
   for d in dirs:
    tar.add(os.path.join(root, d))
4

3 に答える 3

2

さらにtryステートメントを追加する必要があります:

for root, dirs, files in os.walk(folder):
    for f in files:
      try:
        tar.add(os.path.join(root, f))
      except IOError:
        pass
    for d in dirs:
      try:
        tar.add(os.path.join(root, d), recursive=False)
      except IOError:
        pass

[編集]Tarfile.addはデフォルトで再帰的であるため、recursive=Falseディレクトリを追加するときにパラメータを追加しました。そうしないと、問題が発生する可能性があります。

于 2010-05-20T18:18:51.650 に答える
1

読み取り権限でファイルを追加しようとする場合と同じtry/exceptブロックが必要になります。現在、ファイルまたはサブディレクトリのいずれかが読み取り可能でない場合、プログラムはクラッシュします。

ブロックにそれほど依存しないもう1つのオプションはtry、ファイル/フォルダーをtarballに追加する前に、アクセス許可を確認することです。これを最適に行う方法(およびWindowsを使用するときに避けるべきいくつかの落とし穴)については、全体的な質問があります。Python-ディレクトリのアクセス許可をテストする

基本的な擬似コードは次のようになります。

if folder has read permissions:
    add folder to tarball
else:
    for each item in folder:
        if item has read permission:
            add item to tarball
于 2010-05-20T18:15:55.840 に答える
-1

他のみんなが言ったことに加えて、ファイルパラメータとそのプロパティをチェックするために探しているプロパティを渡すことができるネイティブのPython関数があります:hasattr('/path/to/file.txt', "read")またはhasattr('/path/to/file.txt', "write")など、これが他の誰かに役立つことを願っています

于 2012-10-11T09:09:19.417 に答える