エンコードされた文字列をメモリに読み込んでデコードしています。文字列は"test\file1.txt"のようなものです。
通常、C# はこれを文字列リテラル"test \\ file1.txt"として認識し、バックスラッシュ文字にエスケープ文字を正しく割り当てます。
この場合、C# はファイルからの f のエスケープ文字としてスラッシュを認識します。("\f")。
文字列のReplace(@"\", @"\")メソッドを使用できません。C# では "\" が見つからず、"\f" しか見つからないためです。ファイル名は完全に可変なので、Replace(@"\f", @"\f")も使用できません...
このメモリ内文字列を処理してスラッシュを追加し、文字列が有効なパスになるようにするにはどうすればよいでしょうか?
文字列はテキスト ファイルから読み込まれ、デコーダを通過します。
public static string Decode(string inp)
{
byte[] ToDecode = System.Convert.FromBase64String(inp);
return System.Text.ASCIIEncoding.UTF8.GetString(ToDecode);
}
これは、実際に文字列を使用する場所です(「A」と呼ばれます)
foreach (string A in Attchmnts)
Msg.Attachments.Add(new Attachment(_AttachmentsPath + @"\" + A));
添付ファイルの内容をすぐに確認すると、次の結果が得られます。
?_AttachmentsPath + @"\" + A
"\\\\BUPC1537\\MailServer\\Attachments\\test\file2.txt"
次のメソッドを即時に呼び出して (そしてそのデータを XML ドキュメントに貼り付けて)、文字列を手動でエンコードしました。
public static string Encode(string inp)
{
byte[] ToEncode = System.Text.ASCIIEncoding.UTF8.GetBytes(inp);
return System.Convert.ToBase64String(ToEncode);
}
//Immediate code
?Utils.Encoder.Encode("test\file2.txt")
"dGVzdAxpbGUyLnR4dA=="