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

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

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

Re[7]: Windowsで許可されているファイル名かどうかを調べる方法


(過去ログ 87 を表示中)

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

■52059 / inTopicNo.1)  Windowsで許可されているファイル名かどうかを調べる方法
  
□投稿者/ ピース98 (1回)-(2010/07/30(Fri) 10:05:55)

分類:[VB.NET/VB2005 以降] 

テキストボックスにファイル名を入力し、それをプログラム内で指定したフォルダに保存したいのですが、
テキストボックスにファイル名を入力した後、入力内容にWindows(XP以降)で許可されていない文字が
含まれているかどうかを調べたいのですが、
(1)Windows(XP以降)で、ファイル名に許可されていない文字は何でしょうか?
(2)上記許可されていない文字が含まれているかどうかを調べる、簡単な方法は何でしょうか?
言語はVB 2008です。
よろしくお願いします。
引用返信 編集キー/
■52060 / inTopicNo.2)  Re[1]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ Jitta on the way (657回)-(2010/07/30(Fri) 10:20:37)
No52059 (ピース98 さん) に返信
> (1)Windows(XP以降)で、ファイル名に許可されていない文字は何でしょうか?
> (2)上記許可されていない文字が含まれているかどうかを調べる、簡単な方法は何でしょうか?


http://msdn.microsoft.com/ja-jp/library/system.io.path.aspx
引用返信 編集キー/
■52062 / inTopicNo.3)  Re[1]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ よねKEN (558回)-(2010/07/30(Fri) 10:28:41)
よねKEN さんの Web サイト
No52059 (ピース98 さん) に返信
> (1)Windows(XP以降)で、ファイル名に許可されていない文字は何でしょうか?

プログラムでは、Path.GetInvalidFileNameCharsメソッドで確認できます。
プログラム以外では、例えば、エクスプローラなどでファイル名の変更時に使えない文字(例えば「:」)を打ってみると、
エラーメッセージで使えない文字一覧が表示されます。

> (2)上記許可されていない文字が含まれているかどうかを調べる、簡単な方法は何でしょうか?

Path.GetInvalidFileNameCharsを使った方法が以下にあります。
http://dobon.net/vb/dotnet/file/invalidpathchars.html

#上記のURL通り、チェックとしては不完全ですが私はこの程度までのチェックしかしていないですね。
#他の方はもっと厳密なチェックとかしているのかな・・・
引用返信 編集キー/
■52073 / inTopicNo.4)  Re[2]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 囚人 (524回)-(2010/07/30(Fri) 11:40:06)
>プログラムでは、Path.GetInvalidFileNameCharsメソッドで確認できます。

こんなのあったのか…。結構便利そうですね。
ただ、引数に文字列渡したらそれが有効か無効か返してくれるメソッドの方が良かったのに…。

bool Path.IsValidFileName(string filename)

みたいな。

引用返信 編集キー/
■52076 / inTopicNo.5)  Re[3]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ よねKEN (560回)-(2010/07/30(Fri) 11:58:34)
よねKEN さんの Web サイト
No52073 (囚人 さん) に返信
> ただ、引数に文字列渡したらそれが有効か無効か返してくれるメソッドの方が良かったのに…。

同感です。

> bool Path.IsValidFileName(string filename)

同じように思ったので、MSDNで確認した範囲ではなさそうでした。。。

引用返信 編集キー/
■52077 / inTopicNo.6)  Re[2]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 魔界の仮面弁士 (1724回)-(2010/07/30(Fri) 12:11:28)
No52062 (よねKEN さん) に返信
> Path.GetInvalidFileNameCharsを使った方法が以下にあります。
> http://dobon.net/vb/dotnet/file/invalidpathchars.html
> #他の方はもっと厳密なチェックとかしているのかな・・・

有効な文字かどうかまではチェックしきれませんが、
少なくとも無効な文字であろうという判断はできますね。
簡易的な事前チェックとしては充分だと思います。

ただし、本当に使えるのかどうかを調べたいなら、実際にアクセスしてみて
例外を拾うしか無いと思います。

厳密にやろうとすると、文字種だけではなく文字数制限も考慮せねば
なりませんし、ファイルシステムや利用方法などに依存する部分も多いですから。
http://blogs.wankuma.com/iijimas/archive/2008/06/12/143053.aspx


たとえば CD-R に書き込むなら、Joliet では最大64文字、Romeo では最大128文字という
制限がかかりますし、旧式のネットワークサーバーを使っている環境においては、
8+3 文字形式のファイル名しか使えないネットワークフォルダなんてのもありえます。


--- 以下蛇足 ---
ファイル名ネタで思い出した事があります。

 (1) 全角大文字「C:\AAA」
 (2) 全角小文字「C:\aaa」
 (3) 半角大文字「C:\AAA」
 (4) 半角小文字「C:\aaa」

Win9x 環境(FAT) や MS-DOS 環境では「3と4を同一視、それ以外は別物」だったのに、
Win9x 環境(FAT32)や WinNT系(NTFS)では「1と2を同一視、3と4を同一視」という仕様に
気付かず、ハマった事がありました。今回の話とは微妙に異なりますけれども。


蛇足ついでに、こういう情報も。
http://mag.autumn.org/Content.modf?id=20051017152735
http://loafer.jp/mixi/diary/class.xsp?2006-11-03-16-50

 Process.Start("\\?\C:\WINDOWS\win.ini")

 Directory.CreateDirectory("C:\AAA")
 File.WriteAllText("C:\AAA\BBB", "これは[BBB]です")
 Process.Start("cmd", "/C ECHO これは[BBB:CCC.TXT]です。>C:\AAA\BBB:CCC.TXT")
 Process.Start("notepad", "C:\AAA\BBB:CCC.TXT")
引用返信 編集キー/
■52081 / inTopicNo.7)  Re[2]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 渋木宏明(ひどり) (1380回)-(2010/07/30(Fri) 12:31:37)
渋木宏明(ひどり) さんの Web サイト
> #他の方はもっと厳密なチェックとかしているのかな・・・

「どうしても」と言われない限り、あるいは UI の流れ上「どうしても」必要であると思えない限り、チェックしません。

よくある「所詮、事前チェックは事前チェックに過ぎない」系のお題目でしょう。

だいたい、ボリュームによって利用可能な文字とか変わったりもするわけで。
引用返信 編集キー/
■52083 / inTopicNo.8)  Re[4]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ aetos (321回)-(2010/07/30(Fri) 12:49:30)
No52076 (よねKEN さん) に返信
> ■No52073 (囚人 さん) に返信
>>ただ、引数に文字列渡したらそれが有効か無効か返してくれるメソッドの方が良かったのに…。
>
> 同感です。
>
>>bool Path.IsValidFileName(string filename)
>
> 同じように思ったので、MSDNで確認した範囲ではなさそうでした。。。

CON とか NUL とかありますしね。
引用返信 編集キー/
■52084 / inTopicNo.9)  Re[3]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 774RR (523回)-(2010/07/30(Fri) 13:32:39)
事前チェックがムダムダムダには同意なんだけど、
> 実際にアクセスしてみて
OSごとクラッシュするってのがあったしなー、対処が難しいところっすね
# concon 問題とか
引用返信 編集キー/
■52104 / inTopicNo.10)  Re[4]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 渋木宏明(ひどり) (1381回)-(2010/07/30(Fri) 21:41:10)
渋木宏明(ひどり) さんの Web サイト
> OSごとクラッシュするってのがあったしなー、対処が難しいところっすね

え、それどの世代です???
引用返信 編集キー/
■52105 / inTopicNo.11)  Re[5]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 774RR (525回)-(2010/07/30(Fri) 22:01:16)
Win95/98 っすね 確か Me も該当していたはず
http://d.hatena.ne.jp/keyword/concon%CC%E4%C2%EA?kid=118902
2010 年の今 concon 問題はさほど障害にならないと思われるですが。
引用返信 編集キー/
■52108 / inTopicNo.12)  Re[6]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ 渋木宏明(ひどり) (1382回)-(2010/07/30(Fri) 23:08:49)
渋木宏明(ひどり) さんの Web サイト
> Win95/98 っすね 確か Me も該当していたはず
> http://d.hatena.ne.jp/keyword/concon%CC%E4%C2%EA?kid=118902

Me でも対策されてなかったとは。。。

引用返信 編集キー/
■52142 / inTopicNo.13)  Re[7]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ ピース98 (2回)-(2010/08/02(Mon) 11:15:43)
皆様、書き込みありがとうございました。
今回の目的は、Path.GetInvalidFileNameCharsを使用した方法で事足りることが分かりました。
本当にありがとうございました。
解決済み
引用返信 編集キー/
■52166 / inTopicNo.14)  Re[7]: Windowsで許可されているファイル名かどうかを調べる方法
□投稿者/ みきぬ (938回)-(2010/08/02(Mon) 16:27:27)
# 脱線

No52108 (渋木宏明(ひどり) さん) に返信
>>Win95/98 っすね 確か Me も該当していたはず
>>http://d.hatena.ne.jp/keyword/concon%CC%E4%C2%EA?kid=118902
>
> Me でも対策されてなかったとは。。。
>
調べた限りでは、該当するのは 95, 98, および 98SE で、Me は対策済みですた。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -