4

ファイル名を保存するクラスを作成しています。そのためには、どの文字が無効で、どの文字が先頭/末尾の文字として無効であるかを正確に知る必要があります。

Windows エクスプローラーは、ファイルに名前を付けるときに先頭と末尾の空白文字を自動的に削除するため、ファイル名インスタンスを作成するときに同じ文字を削除する必要があります。

string.Trim() を使用することを考えましたが、トリミングするデフォルトの文字セットが、OS の無効な先頭/末尾のファイル名文字と正確に一致すると仮定するのは単純です。

string.Trim() のドキュメントによると、デフォルトで次の文字がトリミングされます: U+0009、U+000A、U+000B、U+000C、U+000D、U+0020、U+0085、U+00A0、U +1680、U+2000、U+2001、U+2002、U+2003、U+2004、U+2005、U+2006、U+2007、U+2008、U+2009、U+200A、U+200B 、U+2028、U+2029、U+3000、U+FEFF

残念ながら、上記の文字の一部は、System.IO.Path.GetInvalidFileNameChars によって返される文字セットに含まれていないため、ファイルでは無効ではありません。

次に、string.Trim() がファイル名から有効な先頭/末尾の文字を削除する可能性があるため、ファイル名が破損する可能性があることを修正しますか?

Windows Vista OS のファイル名の無効な先頭/末尾文字は正確には何ですか? OSは異なるファイルシステムで実行できるため、必ずしもファイルシステム自体と同じではないことを理解しています。

4

3 に答える 3

3

ファイル名はスペースで開始/終了できます。トリムはそれらを排除します。

ファイル名に次を含めることはできません

/ \ : * ? " | < >
于 2009-04-13T04:01:01.917 に答える
3

次に、string.Trim() がファイル名から有効な先頭/末尾の文字を削除する可能性があるため、ファイル名が破損する可能性があることを修正しますか?

はい。UNIX ライクなシステムではなおさらです。' X' は有効なファイル名であり、' x ' とは異なります。

于 2009-04-13T04:01:20.730 に答える
1

このコードが実行され、ファイルが作成されます。

Imports System.IO
Module Module1

Sub Main()
    Dim fs As New FileStream("d:\temp\   file . foo ", FileMode.Create, _
       FileAccess.Write)
    'declaring a FileStream and creating a word document file named file with
    'access mode of writing
    Dim s As New StreamWriter(fs)
    'creating a new StreamWriter and passing the filestream object fs as argument
    s.BaseStream.Seek(0, SeekOrigin.End)
    'the seek method is used to move the cursor to next position to avoid text to be
    'overwritten
    s.WriteLine("This is an example of using file handling concepts in VB .NET.")
    s.WriteLine("This concept is interesting.")
    'writing text to the newly created file
    s.Close()
End Sub

End Module

注: 上記のコードで作成されたファイルの実際の名前は、"file .foo" のように見えます。エクスプローラーでファイル名を編集すると、スペースはありませんが、上記のコードを再実行すると、ファイルが置き換えられます。

注: http://www.startvbdotnet.com/files/default.aspxからコードを取得し、スペースを追加しました

注:Vistaのエクスプローラーの名前変更では、ファイル名の前後にスペースを追加できないため、その方法を使用して「foo .txt」を作成できますが、「foo.txt」は作成できません。

于 2009-04-13T04:10:30.083 に答える