双重道歉 - 首先,我对 ASP.net 完全陌生,所以我确信这是一个非常幼稚的问题,其次,看起来已经有一百个关于 ASP.NET 相对路径的问题。不幸的是 - 我找不到能回答我问题的人。
背景 - 我正在处理一个.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
那么,我怎样才能让它工作(最好是在本地和服务器上?)