Pandora Pocket

IT系と日常系の備忘録。三日坊主。

ファイルがあります

とある案件でMicrosoft Reportを利用した印刷を行っていたんですが、お客様から突然印刷ができなくなったと連絡を受けまして。

調査のためにスタックトレースを出力したところ、エラーメッセージとして

IOException ファイルがあります

と出力されていました。

実際にエラーを吐いているコードを確認して見たところ、GetTempFileNameを利用して印刷用リソースを一時ファイルに出力するところで例外が発生してます。

どうやら下記のブログに書いてある内容のようです。

なぜだかTeX2imgが動かないという話,突き詰めてみたら一時フォルダがいっぱいで新しいファイルを作れないという理由だった.と言うわけで,一時フォルダはたまにお掃除しましょう.そういえば懐かしの窓の手にはシャットダウン時に一時フォルダを綺麗にする機能がついていた気がする.ちなみに...
[はてなブックマークで表示]

確かに環境変数で定義されている一時フォルダをみると、tmp****.tmp(****は16進数)というファイルが65535個存在していました。

一意な名前を持つ 0 バイトの一時ファイルをディスク上に作成し、そのファイルの完全パスを返します。
[はてなブックマークで表示]

もう数年問題なく動いていたプログラムなのになぜ・・・と思ったのですが、納得。

私が作った場所じゃなかったので余計ぴんと来てませんでした。
一時ファイル作っておいて消さない実装をしてたのが悪い。GetTempFileNameに罪はない。

先ほどのブログ先では「GetRandomFileName」を利用するようにされていましたが、今回は単に一時ファイルを削除する方法で対応することに。

動いているからって問題ないと思うと後で痛い目に合う典型ですね。。。