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

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

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

Re[16]: フォルダ内のファイル名を取得する方法 [2]


(過去ログ 35 を表示中)

[トピック内 47 記事 (41 - 47 表示)]  << 0 | 1 | 2 >>

■17600 / inTopicNo.41)  Re[21]: フォルダ内のファイル名を取得する方法
  
□投稿者/ ネタ好き (176回)-(2008/04/28(Mon) 03:31:38)
2008/04/28(Mon) 03:55:38 編集(投稿者)
2008/04/28(Mon) 03:42:14 編集(投稿者)
2008/04/28(Mon) 03:40:04 編集(投稿者)

>そこまでこだわるなら、マーシャリングのコストも馬鹿にならないですね。

それもそうですね。ならばここで影が薄いC++/CLIの出番です!
ファイルがらみの処理をC++/CLIでしてしまって、
処理結果をVBで呼び出すとかすればパフォーマンスさらにUPです。
もちろん全部C++/CLIでやった方がいいかもしれない。
いや、もしこのファイル処理のソフト全体で占める割合が大きいのならばいっそILでコーディングしてしまうのがベストかな?

[追記]
今思ったのですが、.NET側でも厳重に妥当性をチェックしているのは、もしかしたらクラッキング対策かもしれません。
よく考えてみると、.NETランタイムを乗っ取る事も一応可能なはずです。だから受け取るもの全てを「疑って」チェックしているのかもしれませんね。
引用返信 編集キー/
■17601 / inTopicNo.42)  Re[21]: フォルダ内のファイル名を取得する方法
□投稿者/ ま (25回)-(2008/04/28(Mon) 04:13:52)
2008/04/28(Mon) 04:30:06 編集(投稿者)
2008/04/28(Mon) 04:22:43 編集(投稿者)

<pre><pre>ふむ、変だ。

ExtensionFilter って無いの?って答えに、あるっていう答えだったが
Javaみたいな幾つでもOKよん、好きなだけ納得行くまで書いてちょーだい
てゆーのだと思ってた。

何で二度手間にこだわっているのかよくわからんのかったのだが、確かに
二度手間ですね・・・

-- VB.NET --
Imports System.IO

Module Module1

    Sub Main()

        Dim files() As String = Directory.GetFiles("C:\Temp", "*.txt")

        Console.WriteLine("files({0})", files.Length)

        For Each name As String In files
            Console.WriteLine(name)
        Next

        Console.In.ReadLine()


    End Sub

End Module


答え:
files(2)
C:\Temp\sample.txt
C:\Temp\sample.txt2

-- Java --
import java.io.*;

public class TestFind {

	
	public class MyFilter implements FileFilter {
		
		public boolean accept(File file) {
			
			if (file.getName().toLowerCase().endsWith("txt")) {
				return true;
			}

			return false;
		}
	}

	public static void main(String[] args) {
		File file = new File("C:/Temp");
		
		TestFind tf = new TestFind();
		
		File[] files = file.listFiles(tf.new MyFilter());
		
		if (files != null) {

			for (int i=0;i < files.length;i++) {
				
				System.out.println("[" + i + "] " + files[i].getName());
			}
			
		}
		else {
			System.err.println("ERROR is null");
		}
	}
}

答え:
[0] sample.txt


Javaとじゃ比較自体間違っているがしかし・・・変だ。
良く見てみると、Javaは総当り篩い掛けですね。
.NET の方は微妙な・・・篩に掛かってないじゃん・・・・やっぱり変。

</pre></pre>

引用返信 編集キー/
■17602 / inTopicNo.43)  Re[22]: フォルダ内のファイル名を取得する方法
□投稿者/ ちゃっぴ (103回)-(2008/04/28(Mon) 09:22:37)
ちゃっぴ さんの Web サイト
No17600 (ネタ好き さん) に返信
> それもそうですね。ならばここで影が薄いC++/CLIの出番です!
> ファイルがらみの処理をC++/CLIでしてしまって、

私もこの意見に賛成。
こういうのもありますし。

.NET では 520 Byte を超えた path を扱えない
http://blogs.wankuma.com/tyappi/archive/2007/05/18/77226.aspx
引用返信 編集キー/
■17606 / inTopicNo.44)  Re[16]: フォルダ内のファイル名を取得する方法
□投稿者/ 魔界の仮面弁士 (696回)-(2008/04/28(Mon) 10:19:18)
No17571 (渋木宏明(ひどり) さん) に返信
> CompareMethod のヘルプには
>>Text システムの LocaleID 値によって決定された、大文字小文字を区別するテキスト並べ替え順に基づいて、テキスト比較を実行します。
> とありますが、大文字小文字を同一視して比較するんですか>CompareMethod

日本語ロケールにおいては、大文字小文字が同一視されます、Option Compare Text および CompareMethod.Text では。

ですが、半角の『ア』と全角の『ア』と『あ』も同一視されますので、ファイル名比較に使うのは微妙です。
さらに言うと、『○゜゜』と『●』が同一視されるという謎仕様…! (eXConn ユーザなら、7208 のスレッドを参照)



No17517 (魔界の仮面弁士) に追記
> Windows のファイル名では、ABC と abc は同一視されますが、
> ABCとabcは別物として扱われる事になっていますし。

NT系(WinXP など)だと、FAT か NTFS かに関わらず、両者が同一視されますね。

一方、Win9X (あるいは、Windows 3.1 や MS-DOS 6.20 など)においては、
"C:\ABC" と "C:\abc" が別物として扱われました。

# A系 API と W系 API の仕様の違いによるものなのかな…。他言語環境だとどうなのだろう?


9x 系 OS で、"C:\ABC" と "C:\abc" という全角 3 文字のディレクトリを作成し、
そのドライブを Win2000 環境に繋いで参照すると、コマンドプロンプトやエクスプローラ等からは
ABC と abc のそれぞれのディレクトリが表示されて見えるものの、OS からは
両者が同一視されているため、一方のフォルダにしかアクセスできないという問題が…。
引用返信 編集キー/
■17627 / inTopicNo.45)  Re[21]: フォルダ内のファイル名を取得する方法
□投稿者/ す (9回)-(2008/04/28(Mon) 16:10:54)
No17599 (れい さん) に返信
> FindFirstFileなら、問題はありませんから、
> これも同じ問題ですよね。
> DirectorySeparatorなど、OSがサポートしない文字が含まれていないことを確認したら、
> そのままFindFirstFileに渡してくれるだけでいいのに、と私は思います。
> 違うプラットフォームとかを考えてるのかもしれませんが。



FindFirstFileも同じ問題があるのでは?
というか、問題はFindFirstFileにあるのでは?
引用返信 編集キー/
■17632 / inTopicNo.46)  Re[22]: フォルダ内のファイル名を取得する方法
□投稿者/ れい (514回)-(2008/04/28(Mon) 18:02:35)
No17627 (す さん) に返信
> ■No17599 (れい さん) に返信
>>FindFirstFileなら、問題はありませんから、
>>これも同じ問題ですよね。
>>DirectorySeparatorなど、OSがサポートしない文字が含まれていないことを確認したら、
>>そのままFindFirstFileに渡してくれるだけでいいのに、と私は思います。
>>違うプラットフォームとかを考えてるのかもしれませんが。
>
> ?
>
> FindFirstFileも同じ問題があるのでは?
> というか、問題はFindFirstFileにあるのでは?

あれ?
FindFirstも検索文字列に「<」とか「>」といったワイルドカードは使えないのでしたっけ?
むー。だとすると拡張子で探すのは大変ですねぇ


> ■No17517 (魔界の仮面弁士) に追記
>>Windows のファイル名では、ABC と abc は同一視されますが、
>>ABCとabcは別物として扱われる事になっていますし。
>
> NT系(WinXP など)だと、FAT か NTFS かに関わらず、両者が同一視されますね。
>
> 一方、Win9X (あるいは、Windows 3.1 や MS-DOS 6.20 など)においては、
> "C:\ABC" と "C:\abc" が別物として扱われました。

そうそう。
Win9xに限らず、FATの使用上は許されるファイル名も、
WindowsのFAT実装では無理なのがいくつかありますよね。

どうしても削除できないディレクトリとかができてしまったり。

内部的にはRtlUpcaseUnicodeStringを呼んでから比較してます。
8.3形式もどう振られるかはファイルシステム依存だし、
その辺のマッチングもファイルシステム依存なのですよね。

なら「*」で全ファイルを探して自分で探すのがいいのかというと…。
「*」で重複したファイルが返る場合もあるし、
大量にある場合は重いし、
「*」で返らないファイルがある場合もあるので…。

8.3をいまだにサポートするのがいけないのかしら。
引用返信 編集キー/
■17634 / inTopicNo.47)  Re[16]: フォルダ内のファイル名を取得する方法
□投稿者/ 魔界の仮面弁士 (698回)-(2008/04/28(Mon) 23:07:05)
No17571 (渋木宏明(ひどり) さん) に返信
> CompareMethod のヘルプには
>> Text システムの LocaleID 値によって決定された、大文字小文字を区別するテキスト並べ替え順に基づいて、テキスト比較を実行します。
> とありますが、大文字小文字を同一視して比較するんですか>CompareMethod


誤訳のようですね。


誤:《Text - 大文字小文字を区別する》になっている物

[Strings.StrComp メソッド]
http://msdn2.microsoft.com/ja-jp/library/microsoft.visualbasic.strings.strcomp.aspx
http://msdn2.microsoft.com/ja-jp/library/microsoft.visualbasic.strings.strcomp%28VS.85%29.aspx
ms-help://MS.VSCC.v80/MS.MSDN.vAug06.ja/cpref1/html/M_Microsoft_VisualBasic_Strings_StrComp_2_8f8eba46.htm



正:《Text - 大文字と小文字が区別されない(case-insensitive)》になっている物

[Strings.StrComp メソッド]
http://msdn2.microsoft.com/en-us/library/microsoft.visualbasic.strings.strcomp.aspx
http://msdn2.microsoft.com/en-us/library/microsoft.visualbasic.strings.strcomp%28VS.85%29.aspx

[StrComp 関数]
http://msdn2.microsoft.com/ja-jp/library/9s233cfc.aspx
http://msdn2.microsoft.com/en-us/library/9s233cfc.aspx
http://msdn2.microsoft.com/ja-jp/library/9s233cfc%28VS.80%29.aspx
http://msdn2.microsoft.com/en-us/library/9s233cfc%28VS.80%29.aspx
ms-help://MS.VSCC.v80/MS.MSDN.vAug06.ja/dv_vbalr/html/b0b9cc74-369c-4f38-9d3b-df6153e1bf15.htm
引用返信 編集キー/

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

このトピックに書きこむ

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

管理者用

- Child Tree -