我在磁盘上托管了一个文件以及我想要阅读的网站。当我使用System.Environment.CurrentDirectory指向D驱动器位置时,我不确定如何访问该文件。有人请告诉我如何访问存储在我的网站所在位置的根目录的文件。
由于
答案 0 :(得分:11)
在您的网站环境中有一个名为HOME的环境变量可以帮助您在那里工作。
您可以使用razor语法或代码(C#)访问它。例如,假设您有一个名为data.txt的文件,该文件位于站点的根目录下,其中包含默认文档和其余文件。你可以得到这样的完整路径。
@{ var dataFileName = Environment.GetEnvironmentVariable("HOME").ToString() + "\\site\\wwwroot\\data.txt"; }
您可以使用站点控制管理/" Kudu"自行找到它。例如,如果您的网站是contoso.azurewebsites.net,那么只需导航到contoso。 scm .azurewebsites.net。在这里,您可以了解有关您网站可用的文件系统和环境变量的所有信息。
答案 1 :(得分:4)
为了测试性,我使用下面的代码。
string path = "";
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("HOME")))
path = Environment.GetEnvironmentVariable("HOME") + "\\site\\wwwroot\\bin";
else
path = ".";
path += "\\Resources\\myfile.json";
在上面的示例中,我将myfile.json
文件添加到Resources
和Content
属性设置的项目中的Copy if newer
文件夹中。
答案 2 :(得分:1)
这适用于localhost和azure:
Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "file_at_root.txt");
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath
是您网站根目录的完整本地路径。
答案 3 :(得分:0)
我当前正在使用AppDomain.CurrentDomain.BaseDirectory
(。NET Core项目)。它在Azure中返回“ D:\ home \ site \ wwwroot \”,在本地返回应用程序根目录,因此唯一的区别是在Azure中添加“ bin \\”。我正在搜索整个目录树,以防万一,但是可以进行修剪。
类似于:
private static string GetDriverPath(ILogger logger, string fileName)
{
var path = AppDomain.CurrentDomain.BaseDirectory;
if (File.Exists(Path.Combine(path, fileName)))
{
return path;
}
string[] paths= Directory.GetFiles(path, fileName, SearchOption.AllDirectories);
if (paths.Any())
{
return Path.GetDirectoryName(paths.First());
}
throw new FileNotFoundException($"{fileName} was not found in {path}.", fileName);
}
我是新回答的问题,虽然这是一个老问题,但我希望它可以帮助某人。
答案 4 :(得分:0)
您可以使用以下代码进行操作。
string fullFilePath = Environment.GetEnvironmentVariable("HOME") != null
? Environment.GetEnvironmentVariable("HOME") + @"\site\wwwroot\test.txt" //It will give the file directory path post azure deployment
: Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory())) + @"\test.txt";//It will give the file directory path in dev environment.