• ベストアンサー

VC++2005のtmpfile_sで開いた時にどこに作成されるのでしょうか?

VC++2005で、tmpfile_s関数を使ってテンポラリファイルをオープンして書き込みましたが、通常どこに作成されるのでしょうか? 一時的なので、見る必要はあまりないのですが、気になりまして・・・

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>一時ファイルは、ルート ディレクトリに作成されます この文の先頭には「実行したプロセスに環境変数 TMP が与えられていない場合や、環境変数 TMP が指すディレクトリが無効な場合は」が抜けてます。 特に、WinXPなどの「NT系OS」は、ブートドライブのルートディレクトリにファイルを作り過ぎると「NTLDR is missing」が発生し、OSが起動しなくなります。 http://support.microsoft.com/kb/320397/ja この問題は「NTLDRがルートディレクトリのファイルエントリの32番目よりもうしろに追い出される」と発生するので「たとえ一時的であっても、ルートディレクトリには、絶対に32個以上のファイルを作ってはいけない」です。 なので「一時フォルダをルートディレクトリに作っているとしたら、自殺行為に等しい」ので、そんな事は絶対にありません。 tmpname_s関数を使うと「tmpfile_s関数でファイルが作られる際の、一時ファイルの名前」を取得出来るので、tmpname_s関数を試してみると良いでしょう。 以下、蛇足ですが「NTLDR is missing問題」は、最新版のサービスパックをOSに適用しただけでは問題解決しません。 なぜなら「起動ドライブのブートレコードは、サービスパックを適用しても更新される事はなく、問題を含むバージョンのOSで書かれたブートレコードはずっと問題を含んだまま」です。 問題を解決するには「マイクロソフトから、ブートレコードを更新するツールを入手して、起動ドライブのブートレコードを書き換える必要」があります。 >ただ、日本語はまれに誤訳があったり、 >肝心な部分が省略されていたりするので、 機械翻訳なので誤訳は仕方が無いですが、英語の原文そのものが「肝心な部分が書いてない」ので、翻訳が悪い訳じゃありません。「元から抜けてる」んですから、どうしようもないです。 業界では「オフィシャルな筈のMSの情報が一番信用できない」などと言われてたりします。ANSIで規格化されている筈の標準Cライブラリも、MSのだけ「確かに規格の範囲内だけど、MSだけ独自路線を突っ走って」いて、かなり「困ったちゃん」です。 「MSの言う事だけは信用するな」が鉄則です。

kourei
質問者

お礼

回答ありがとうございます。 WinXPx64Proで、環境変数TMPをルート以外に設定していますが、 C:\にテンポラリファイルが作成されます。 処理が終わると無くなりますが、お書きになった内容ですと このままこのアプリを動かすと、何かよくないような感じがしてきました。 貴重な情報ありがとうございました。

その他の回答 (4)

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.5

またまた、連続で申し訳ありません。 なにせ心配性なもので... プログラマの宿命でしょうか? ご理解ください。 ”業界の皆さん"が利用しているツールについて質問ですが、 当然MSの情報に一切基づかないものであるわけですよね。 私はVC++(正確にはVS2008)とMS製品使っちゃています。 捨てなければなりません。 で、代替品を大至急入手する必要があるわけですが、 どういうものをみなさんはご利用なのでしょうか? gc++とかも考えたのですがMSのwindows.hとかが必要になってしまいます。 SDKとかも信用できないので利用できませんよね。 どうやって解決なされているのでしょうか? また、MSに全く頼ることなく、独自の開発環境(ライブラリ等も含む) となると、乏しい私の知識では、”独自にリバース・エンジニアする" 位しか思いつかないのですが、どのようにして情報を入手されて いるのでしょうか? リバース・エンジニアリングというと恐らくMSが黙っていないと思います。 そういう製品を利用して開発するとなると、 私には不安があるのですが... "業界の常識"で広く使われているのだから、 ライセンスとかは完全にクリアされていると理解しています。 どうやってクリアされているのでしょうか? そのプロセスをご教授願えませんでしょうか? 私の作った製品で利用者様にご迷惑をかけたくないもので、 心配なのです。 そのプロセスが理解できれば、安心して VSを葬り去ることができます。 どうか、よろしくお願い申し上げます。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.4

ちなみに..... (どうせ嘘っぱちに決まっているのでどうでもいいのですが, 念のためといことで) MSDNには確かに機械翻訳の部分も多いですが、 全部ではありません。 機械翻訳の場合はその旨表示されています。 私が"誤記"と言ったのは機械翻訳の誤りのことでは ありません。 例えば、 http://social.msdn.microsoft.com/Forums/ja-JP/vddocumentsja/thread/0313384a-0372-4529-a2f5-e01c9fe86b2c ことです。 このページには”誤訳"のあったページへのリンクがあります。 リンク先には"機械翻訳"の表示はありません。 (嘘つきのMS、表示をしないなんて朝飯前ですね) 読解力のない私には、”それなりに"きれいな日本語と感じます。 機械翻訳も嫌になるほど読みましたが、雲泥の差です。 (さすが、天下のMS、上質な機械翻訳と質の悪い機械翻訳を 使い分けてまでだましているわけですね。 ほんとにあくどいことこの上ないですね) それから、私のいう"省略"とは http://msdn.microsoft.com/en-us/library/aa452850.aspx の訳 http://msdn.microsoft.com/ja-jp/library/cc428300.aspx のようなものを指します。 英文のremarkにある AlphaBlend does not support mirroring. If either the width or height of the source or destination is negative, the call to AlphaBlend will fail. までは訳されています。 AlphaBlend 関数では、ミラー化はサポートされていません。送信元または送信先の幅や高さが負値の場合、この関数は失敗します。 という風に... しかし、英文ではこの後に続きがあるのですが、 日本語では、記述がありません。 このどこが >翻訳が悪い訳じゃありません。「元から抜けてる」んですから というのか、おバカな私には全く理解できないのです。 大変恐縮なのですが、 どうか”暖かいお心で" おバカの私にも理解できるよう、ご丁寧にご教授下さいませんか? よろしくお願い申し上げます。 (あー。早く”業界の常識を知りたいです。 Windows 2000/XP用のドライバをリリースしたのですが、 こともあろうにDDKをDLし、作ってしまいました。 きっとこんなことするのはわたしだけなんだろうな。 早く、DDKを全く使用しない”業界の常識"にそったドライバを リリースしなおさないと大変なことに....)

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.3

No.2さん >この文の先頭には「実行したプロセスに >環境変数 TMP が与えられていない場合や、 >環境変数 TMP が指すディレクトリが無効な場合は」が抜けてます。 tmpfile_s()とGetTempPath()の仕様を混同されているのではないでしょうか? http://msdn.microsoft.com/ja-jp/library/cc429356.aspx ここには No.2さんのおっしゃる通り TMP環境変数が最初に参照される旨記述されています。 もっとも >「MSの言う事だけは信用するな」が鉄則です。 ですから、この情報も信用してはいけないのですね? ちょっとお伺いしたいのですが "「MSの言う事だけは信用するな」が鉄則です" なら、”業界"の皆さんはどうやって Windowsプログラミングをしているのですか? 私の周囲にはWindows関係のプログラマが何人もいます。 守備範囲もVBなどで作る一般的なアプリから、 専用のデバイス・ドライバまで幅広いです。 キャリアは当然人によりけりですが、 最古参の人は Windows 1.xの頃からWinアプリを作っています。 そういう人々は疑問点があるとMSDNで検索したりしてます。 また、アスキー社辺りから出ているMicrosoftオフィシャルの本 を購入して、新技術などを学んでいます。 私も、諸先輩方に学び、ここまでやってきました。 それが、まったくのうそっぱちだったとは!!!!!! しかも、それ(嘘っぱちだらけであること)が ”業界の常識"であったとは..... まさに裸の王様ですね。 これから先もWindowsの仕事は続けたいのですが "業界の常識"となっているサイトや本 (当然、MSが一切関与していないことが条件です。 出典や参考文献、リンク等にMSが出てきたら、 情報の信頼性が根本から揺らいでしまいますので) を教えてください。 先輩方にも大至急連絡したいので よろしくお願いします。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.1

一時ファイルは、ルート ディレクトリに作成されます http://msdn.microsoft.com/ja-jp/library/b3dz6009(VS.80).aspx 他の人にも言えることですが、 質問する前に検索してみてはいかがですか? 上記はグーグルで最初に出てきたものです。 MSDNの記事なので、信憑性は高いです。 ただ、日本語はまれに誤訳があったり、 肝心な部分が省略されていたりするので、 英語版が一番信頼が置けるのですが..... それでも、MSDN日本語版は日本語Windows上のC/C++開発をやるには 必見だと確信しています。 一般の掲示板より信頼がおけます。 MSDNは情報がありすぎたり、多少用語や概念に難があるので (特に初心者には)嫌われるのもわかる気がしますが、 "テンポラリの場所"ぐらいはズバっと書いてあるはずです。 食わず嫌いを直すことを強くお勧めします。 MSDNで疑問に感じたことをこういう掲示板で質問したりするのは、 ”ありだと思います"

関連するQ&A

専門家に質問してみよう