0

ここで頭がおかしくなる。TIFS でいっぱいのフォルダーを解析し、ファイルをサブフォルダーに分割してフォルダーあたりのページ数を約 60 に制限するスクリプトがあります。ドキュメントが非常に大きい場合は、独自のフォルダーが作成されます。

問題は、プロセスがファイルをロックしているため、削除できないことです。ただし、すべてのファイルではありませんが、ほとんどのファイルは正常に機能し、スクリプトの最後のクリーンアップ部分で他のすべてが削除されます。

この問題を修正するためにコードに多くの回避策セクションを書きましたが、今ではかなり見栄えが悪いです

    #Large Documents
Get-ChildItem -Path "$directory" -recurse -filter "*.tif" | foreach {
    $file = [System.Drawing.Bitmap]::FromFile($_.Fullname);
    $pagecount = $file.GetFrameCount($file.FrameDimensionsList[0]); 
    if ($pagecount -gt $MaxSize){
        $total = $total + $pagecount;
        $name = $_.Basename;
        New-Item $name -ItemType directory;
        Copy-Item $_.fullname -Destination $name;
        #Copy-Item $name".DS" -Destination $processingDir;
        Write-Host "Sleeping in large doc loop";
        $file.Dispose;
        Write-Host "Dispose file object";
        Write-Host $_.Fullname
        $storename = $_.Fullname
        $largeFiles = $largeFiles + $storename      
        Write-Host "Storing to array: " $largeFiles[$index];
        $index = $index + 1;
        sleep(15);
    }
}
while ($delInd -lt $largeFiles.Count){
    Write-Host "Deleting: " $largeFiles[$delInd];
    Remove-Item $largeFiles[$delInd] -Force;
    $delInd = $delInd + 1;
}

私はこれに完全に困惑しています。どんな助けでも大歓迎です。

4

1 に答える 1

2

私が理解している限り、$file.Dispose基になるオブジェクトにファイルを強制的に閉じさせないでください。Disposeはメソッドであり、PowerShell (C# など) でメソッドを呼び出すには、 を使用する必要があります()。だから試してみてください$file.Dispose()

アドバイス :;行末は避けることができます

于 2012-11-14T04:18:49.280 に答える