C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[21]: 一時フォルダの考え方


(過去ログ 54 を表示中)

[トピック内 37 記事 (1 - 20 表示)]  << 0 | 1 >>

■30340 / inTopicNo.1)  一時フォルダの考え方
  
□投稿者/ みしま (1回)-(2008/12/22(Mon) 09:37:27)

分類:[ソフトウェア全般] 

宜しくお願いします。

CD-ROMから起動するアプリケーションを作っています。
・インストールは行わない
・ネット接続は使わない
・CD-ROM内には実行ファイルが一つと、表示用ファイルが格納されたフォルダが一つ

という単純な仕組みです。

ただ、ひとつ疑問があります。
インストールを行わない以上は、ユーザのPCにフォルダを作ったりしないと思うのですが、
動作上どうしても「一時フォルダ」が必要となってしまいます。

この場合、一般的なアプリケーションってどうしてるんでしょうか?
ユーザの気付かない所で勝手にフォルダを作っていいものなのでしょうか?
それだとユーザが「あれ?これなんのフォルダ?」という事になりかねないと思うのですが…
それとも動作時のみ、マイドキュメントかどこかに一時的にフォルダを作り、作業が終わったら削除するような仕組みでしょうか?(「勝手に」という意味では前者とあまり変わらない気はしますが)

最近のアプリケーションはインストールする物が多く、CD−ROMのみで完結する物が少ない為、情報が得られません。

正しい答えがあるかどうかはわかりませんが、あくまで「一般的に」という相談なので、どなたか宜しくお願いします。
引用返信 編集キー/
■30341 / inTopicNo.2)  Re[1]: 一時フォルダの考え方
□投稿者/ くだん (14回)-(2008/12/22(Mon) 09:59:28)
No30340 (みしま さん) に返信
テンポラリフォルダ
http://www.itmedia.co.jp/help/tips/windows/w0506.html
引用返信 編集キー/
■30342 / inTopicNo.3)  Re[2]: 一時フォルダの考え方
□投稿者/ みしま (2回)-(2008/12/22(Mon) 10:04:12)
No30341 (くだん さん) に返信

お返事有難うございます。

このTEMPは勝手に使ってしまって良いという事なんですねぇ。
なんかMyDocumentの方はユーザ名で問題がありそうなんで、システムのTempフォルダが良さそうですね。

これでちょっとやってみたいと思います。

有難うございました。
解決済み
引用返信 編集キー/
■30343 / inTopicNo.4)  Re[1]: 一時フォルダの考え方
□投稿者/ 774RR (268回)-(2008/12/22(Mon) 10:05:04)
一時フォルダって結局 C:\TEMP でよい話?それとも専用フォルダが必要なの?
どっちにせよ getenv("TEMP") で取得した場所に一時ファイル/フォルダを作ればいいと思うの心

俺なら getenv("TEMP") -> getenv("TMP") -> getenv("WINDIR")+"Temp" の順に最初にうまくいった場所
3つともだめならカレントディレクトリ、それがだめなら問い合わせダイアログ、かな?

っていうか、一時フォルダがいらないように作りなおすほうがよさそうな気が

# SHGetFolderPath/SHGetKnownFolderPath では一時ファイル用の Path 取れないんだ...
引用返信 編集キー/
■30344 / inTopicNo.5)  Re[2]: 一時フォルダの考え方
□投稿者/ .SHO (497回)-(2008/12/22(Mon) 10:09:18)
> っていうか、一時フォルダがいらないように作りなおすほうがよさそうな気が

可能な限り、この選択がいいと思います。

テンポラリフォルダを使うにせよ、作業が終わったら削除しといた方がいいです。
引用返信 編集キー/
■30346 / inTopicNo.6)  Re[3]: 一時フォルダの考え方
□投稿者/ みしま (3回)-(2008/12/22(Mon) 10:22:24)
皆様

お返事有難うございます。

ユーザ視点では一時フォルダの存在はまったく必要がなく、出来る事なら一時フォルダを使わないように作り変えたいのですが、仕様上どうしても必要と考えています。
なので容量等はともかく、場所やフォルダ名のような事に関しては一時フォルダにルールは考えていません。

なので「処理実行で一時フォルダ作成し、処理終了で一時フォルダ削除」の方向で考えているのですが、その方法ならどこでも良いという事でしょうか?
引用返信 編集キー/
■30348 / inTopicNo.7)  Re[3]: 一時フォルダの考え方
□投稿者/ 774RR (269回)-(2008/12/22(Mon) 10:29:52)
正常終了時に削除するのは当然として
異常発生時に削除できずに放置プレイされてしまうのを懸念、だと思うが
まあとりあえず Windows の標準一時フォルダを使えばいいんだろうな。
そこならディスクのクリーンアップとかで自動的に削除されてしまうだろうし。
その標準一時フォルダは getenv("TEMP") または getenv("TMP") で取得できる。
どこでもいい、ってのは微妙に問題がありそうだしお勧めできないかな。

正常終了時にも削除せずに保存しておきたい、ということなら
そもそもの前提を覆して「インストールするアプリ」としておき
保存すべきデータは HKCU に置くか、または CSIDL_APPDATA に置くか、
どっちか、ということになるだろうけど。
引用返信 編集キー/
■30349 / inTopicNo.8)  Re[4]: 一時フォルダの考え方
□投稿者/ .SHO (500回)-(2008/12/22(Mon) 10:30:06)
No30346 (みしま さん) に返信

> なので「処理実行で一時フォルダ作成し、処理終了で一時フォルダ削除」の方向で考えているのですが、その方法ならどこでも良いという事でしょうか?

どこでもいいと思うし、どこでもいいならTempフォルダでいいと思います。
それよりも、確実に一時フォルダを削除できるようにしておくことに集中した方がいいと思います。
引用返信 編集キー/
■30350 / inTopicNo.9)  Re[5]: 一時フォルダの考え方
□投稿者/ みしま (4回)-(2008/12/22(Mon) 10:34:45)
No30349 (.SHO さん) に返信

では774RRさんの方法でTempを使おうと思います。
確かに一時フォルダが残ってるとマズイので厚めにテストしたいとおもいます^^;

皆様、色々と有難うございました。
解決済み
引用返信 編集キー/
■30351 / inTopicNo.10)  Re[4]: 一時フォルダの考え方
□投稿者/ 渋木宏明(ひどり) (998回)-(2008/12/22(Mon) 10:39:20)
渋木宏明(ひどり) さんの Web サイト
> その標準一時フォルダは getenv("TEMP") または getenv("TMP") で取得できる。

GetTempPath() API を使うのではだめですか?
また、一時ファイル名の作成用に GetTempFileName() なんてのもありますが。

引用返信 編集キー/
■30352 / inTopicNo.11)  Re[6]: 一時フォルダの考え方
□投稿者/ 774RR (270回)-(2008/12/22(Mon) 10:55:32)
> GetTempPath() API を使うのではだめですか?
CSIDL のほうだけに意識がいってたのでそっちは見なかったっす。
OK だと思うです。

> また、一時ファイル名の作成用に GetTempFileName() なんてのもありますが。
みしま 氏が作成したいのが一時ファイルそのものなのか専用ディレクトリなのかわからないので
こっちはなんともいえないですな。これはディレクトリを作る用途には使えないようだし。

そもそも Win32 API ベースなのかどうかもわからないし。
# つい慣れている C/C++ レベルでコメント書いてしまうな>俺
引用返信 編集キー/
■30353 / inTopicNo.12)  Re[7]: 一時フォルダの考え方
□投稿者/ ちゃっぴ (173回)-(2008/12/22(Mon) 11:30:19)
ちゃっぴ さんの Web サイト
> システムのTempフォルダが良さそうですね。

まあ、大丈夫だと思いますがその考えは捨ててください。
そもそも、一般の user は system の temporary folder を扱えません。
書き込めたら脆弱性が生じますし。

個々の user で完結できることは user のみの場所を利用する。
これが鉄則です。
引用返信 編集キー/
■30356 / inTopicNo.13)  Re[8]: 一時フォルダの考え方
□投稿者/ みしま (5回)-(2008/12/22(Mon) 13:24:44)
またたくさんのお返事をいただき有難うございます。

APIはできれば使いたくない環境なので^^;

一応いま、
1.ユーザ環境変数のTEMPを取得
2.失敗したらユーザ環境変数のTMPを取得
3.失敗したらシステムドライブ直下のTempフォルダを取得
4.失敗したらシステム環境変数のTEMPを取得
5.失敗したらシステム環境変数のTMPを取得
6.失敗したらメッセージを表示して終了

という流れで考えているのですが…

ちゃっぴさんの仰る通り、やはりシステム環境変数はリスク高いでしょうか?
それと、3についてですが、システムドライブの直下にTempって必ずあるものなのでしょうか?
引用返信 編集キー/
■30357 / inTopicNo.14)  Re[9]: 一時フォルダの考え方
□投稿者/ ちゃっぴ (175回)-(2008/12/22(Mon) 13:31:23)
ちゃっぴ さんの Web サイト
言語何なんですか?

Profile 読み込まない service とかならともかく、普通の user が起動する application でしょうから、user の %TEMP% を拾うだけで十分かと。
NG なら落ちて問題ないと思いますよ。
引用返信 編集キー/
■30358 / inTopicNo.15)  Re[9]: 一時フォルダの考え方
□投稿者/ Jitta (565回)-(2008/12/22(Mon) 13:49:02)
No30356 (みしま さん) に返信
> またたくさんのお返事をいただき有難うございます。
>
> APIはできれば使いたくない環境なので^^;

 その理由をはっきりさせましょうよ。


>
> それと、3についてですが、システムドライブの直下にTempって必ずあるものなのでしょうか?

ないものもある。NT ぐらいまでなら、あったと思う。
少なくとも、先週クリーンインストールした Windows 2000 にはない。
引用返信 編集キー/
■30361 / inTopicNo.16)  Re[9]: 一時フォルダの考え方
□投稿者/ .SHO (502回)-(2008/12/22(Mon) 13:57:01)
No30356 (みしま さん) に返信

> それと、3についてですが、システムドライブの直下にTempって必ずあるものなのでしょうか?

自分の環境にはないです。
確か以前に、Cドライブをお掃除した時に邪魔なので消しました。
何の問題もなく動いてます。

引用返信 編集キー/
■30362 / inTopicNo.17)  Re[9]: 一時フォルダの考え方
□投稿者/ 渋木宏明(ひどり) (999回)-(2008/12/22(Mon) 14:03:41)
渋木宏明(ひどり) さんの Web サイト
> APIはできれば使いたくない環境なので^^;

なぜ? そういう要望やら開発環境は、最初にきっちり書きましょう。
でないと、少なくとも僕には分らんです。

ちなみに、.NET なら

Path.GetTempPath()
Path.GetTempFileName()

なんてのがあります。

VB なら、My の下になんかあったはず。

引用返信 編集キー/
■30363 / inTopicNo.18)  Re[10]: 一時フォルダの考え方
□投稿者/ ちゃっぴ (176回)-(2008/12/22(Mon) 14:09:01)
ちゃっぴ さんの Web サイト
というか、.NET であった場合、client に .NET Framework install されていなかったらどうするんでしょうね?
引用返信 編集キー/
■30364 / inTopicNo.19)  Re[1]: 一時フォルダの考え方
□投稿者/ .SHO (503回)-(2008/12/22(Mon) 14:19:32)
No30340 (みしま さん) に返信

可能ならば

> 動作上どうしても「一時フォルダ」が必要となってしまいます。

の理由も書いてもらえると嬉しいです。
引用返信 編集キー/
■30370 / inTopicNo.20)  Re[11]: 一時フォルダの考え方
 
□投稿者/ 渋木宏明(ひどり) (1000回)-(2008/12/22(Mon) 14:52:54)
渋木宏明(ひどり) さんの Web サイト
> というか、.NET であった場合、client に .NET Framework install されていなかったらどうするんでしょうね?

Autorun みたいなやつでは、どうしようもないですね。

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -