2012-02-15 9 views
2

に私はC#等価(ファイル名、ForReading)C#の

Public Function ReadATextFile(fileName As String) As String 
Dim FSO As New FileSystemObject 
Dim Tsr As TextStream 
Dim ReturnString As String 

If FSO.FileExists(fileName) Then 
    Set Tsr = FSO.OpenTextFile(fileName, ForReading) 
      ReturnString = Tsr.ReadAll 
      Tsr.Close 

ReadATextFile=ReturnString 

End If 

End Function 

このルーチンに次のVBコードを変換するには、ちょうど私が使用したVBA

でFileSystemObjectオブジェクトを使用して文字列にファイルを読み込みstring str = File.ReadAllText(ofd.FileName); in c#

が、ここでの問題は、私はVBAから文字列を探索する際、文字列の長さは約13000と文字列のC#からの長さは約15000

ですです

なぜそのような違いがありますか? c#によって追加される余分な文字は何ですか?エンコーディング、コンパイラ、その他の要素に依存しますか?

+0

VBAとC#の両方のファイル(WriteAllText)を保存し、変更をdiffしてみることもできます。 –

+0

両方のファイルの内容に違いはありませんが、C#とVBAの両方で同じアルゴリズムを使用して文字列を暗号化すると、別の内容が得られます:( – kevin159

+0

この関数は常に空の文字列 '" "'を返します。 –

答えて

3

C#バージョンはUTF-8エンコーディングを使用します。

エンコードを明示的に指定してみてください。

File.ReadAllText(ofd.FileName, Encoding.Default); 

Encoding.Defaultオペレーティングシステムの現在のANSIページのエンコーディングです。その名前にもかかわらず、オプションのEncodingパラメータを使用するほとんどのメソッドでは、デフォルトのエンコードとしては使用されません。

+0

これは同じですが、文字列を取得した後、C#とVBAの両方で同じアルゴリズムを使用して文字列を暗号化します。別のコンテンツを取得しました。C#はUTF-8を使用します私たちがファイル – kevin159

+0

@ kevin159を読むとき、FileSystemObjectのデフォルトのエンコーディングです: "C#とVBAの両方で同じアルゴリズムを使用して文字列を暗号化します。私は異なった内容を持っています" - ここで何を得ているのか分かりません。あなたが投稿したコードは暗号化とは関係ありません。あなたがVBAとC#の暗号化コードを投稿した場合、誰かが違う結果を出す理由を誰かが説明することは間違いありません。 – Joe

+1

F ile.ReadAllText(ofd.FileName、Encoding.Unicode); – Smack