質問

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

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

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

ドキュメンテーション for 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 は異なるファイル システム上で実行できるため、ファイル システム自体と必ずしも同じではないことを理解しています。

役に立ちましたか?

解決

次に、そのstring.trim()がファイル名から有効なリーディング/トレイルの文字を削除する可能性があるため、ファイル名を破壊する可能性がありますか?

はい。UNIX のようなシステムではさらにそうです。「 X 」は有効なファイル名であり、「 x 」とは異なります。

他のヒント

ファイル名はスペースで開始/終了できます。トリムするとそれらが解消されます。

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

/ \ : * ? " | < >

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

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.ふー」。エクスプローラーでファイル名を編集するとスペースがなくなりましたが、上記のコードを再実行するとファイルが置き換えられます。

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

注記:Vista のエクスプローラーの名前変更では、ファイル名の前後にスペースを追加できないことに気付きました。そのため、「foo .txt" を使用しますが、そのメソッドを使用する " foo.txt " は使用しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top