次のコードサンプルについて:
string baseLocation = HttpContext.Current.Server.MapPath("/");
const string templateName = @"//temp//ExportTemplate.xlsx";
const string generatedLocation = @"{0}//temp//{1}";
var fileName = string.Format("Export-{0}.xlsx", DateTime.Now.Date.ToString("yyyy-MM-dd"));
var newFile = String.Format(generatedLocation, baseLocation, fileName);
File.Copy(baseLocation + templateName, newFile, true);
これは、運用サーバーとローカル開発環境(IISのサイト経由)で使用しています。どちらもIIS7.5を実行しています。コードは本番環境では正しく機能しますが、ローカル開発でエラーが発生します。
Access to the path 'C:\Path\To\Site\//temp//Export-2013-01-29.xlsx' is denied.
ファイルはローカル開発で正しく作成/コピーされますが、パスのスラッシュが正しくないためにエラーが発生していると思います。アプリプールIDには、「temp」フォルダーへのフルアクセス権があります。
これにより、いくつかの質問が発生します。
- この状況では、「//」はパスに対して何をしますか?「\」が円記号をエスケープする方法であることは理解していますが、「//」は意味がありません。
- 生成されたパスを本番サーバーで正しく機能させるが、ローカル開発では失敗する2つの環境の構成に違いはありますか?