2016-03-21 8 views
1

私のコードが不正なフォルダにファイルを書き込んだので、いくつかのログを追加して驚きました。私のコード:Path.Combineにパラメータの1つが指定されていない可能性がある

string savePath = Path.Combine(mapping.Folder, fileMeta.RelativePath, fileMeta.Filename); 
logger.Info(mapping.Folder); 
logger.Info(fileMeta.RelativePath); 
logger.Info(fileMeta.Filename); 
logger.Info("savepath: {0}", savePath); 

これは、ログに書き込まれているもの、である:

C:\Sync 
\0100_MACHINES 
Layout US.pdf 
savepath: \0100_MACHINES\Layout US.pdf 

誰もがPath.Combineは、最初の引数を省略し、ちょうど第二と第三兼ね備えなぜ可能な理由を与えることはできますか?面白いことは、1台のマシンでのみ起こったことです。

答えて

0

第2パラメータはバックスラッシュで始まります。これにより、Path.Combineは前の部分を省略しました。 TrimStartを追加することによって、この問題を解決:パス2は、ルートを含まない場合(パス2がない場合、例えば、区切り文字またはドライブ仕様に起動しない)

string savePath = Path.Combine(mapping.Folder, 
        fileMeta.RelativePath.TrimStart('\\'), 
        fileMeta.Filename.TrimStart('\\')); 
0

を、結果は、二つの連結でありますパスには、区切り文字が挿入されています。 path2にルートが含まれている場合は、path2が返されます。 https://msdn.microsoft.com/en-us/library/dd784047(v=vs.110).aspx

C#のように、相対パスがルートパスとして扱われているため、path1は無視されます。

関連する問題