二重の謝罪-最初に、私はASP.netに完全に慣れていないので、これは非常に素朴な質問であると確信しています。次に、ASP.NETの相対パスについてSOにすでに100の質問があるようです。残念ながら、私の質問に答えるものが見つかりません。
.ashx
背景-Excelファイルにアクセスできる必要があるファイルに取り組んでいます。
ローカルで実行していて、ファイルへの絶対パスを使用している場合、すべてがうまく機能します。これが私のコードです:
<%@ WebHandler Language="C#" Class="MyHandler" %>
using System;
... [a bunch more "usings..."]
using Microsoft.Office.Interop.Excel;
public class MyHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string path = @"C:\Users\[...]\myExcelFile.xls";
Workbook theWorkbook;
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
theWorkbook = app.Workbooks.Open(path);
ただし、これをサーバーで実行し、への相対パスを使用したいと思いますmyExcelFile.xls
。
私のプロジェクトは次のように設定されています。
Main folder:
- Default.aspx
- myExcelFile.xls
- Web.config
- Global.asax
Styles folder
Scripts folder
Handler folder
- MyHandler.ashx (that's reading the Excel File)
bin folder
つまり、Excelファイルがアプリケーションの「ルート」にあることがわかります。
パスを相対的なものにするために、私は次のことを試みましたが成功しませんでした。
「相対的」がmyHandler.ashxからのものであると仮定します。
string path = @"..\myExcelFile.xls":
~
それが「ルート」を参照していると仮定します。
string path = @"~\myExcelFile.xls";
推測するだけ:
string path = @".\myExcelFile.xls";
ただ必死です:
string path = "myExcelFile.xls";
これらはどれも機能しませんでした。
そこで、ここでSOについて少し調べてみたところ、が見つかりましSystem.IO.Path.GetFullPath
た。だから私は試しました:
string path = System.IO.Path.GetFullPath("myExcelFile.xls");
それはうまくいきませんでしたが、少なくとも私はの価値path
がC:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\11.0\PinpointTool-DC.xls
もちろん-私はそれをまったく理解していません-その道は私のプロジェクトがどこにあるのかどこにもありません(つまり、私は何をしているのか理解してSystem.IO.Path.GetFullPath
いません...)
最後に、試しServer.MapPath("myExcelFile.xls")
ましたが、まったく機能しません(少なくともローカルでは):
Compiler Error Message: CS0103: The name 'Server' does not exist in the current context
では、どうすればこれを機能させることができますか(理想的にはローカルとサーバーの両方で?)