[英]Dereference C: drive c# asp.net
我希望我的代码只从我的项目文件夹而不是绝对路径开始的相对路径中获取我的 sql 脚本。 我正在使用 web forms 并计划在服务器上发布此代码,因此我需要按路径取消引用。
当前域.BaseDirectory:
"C:\\Users\\username\\Documents\\folder_name\\project_name\\project_name\\"
抓取文件时的样子:
"C:\\Users\\username\\Documents\\folder_name\\project_name\\project_name\\sql_script"
我希望它看起来像什么:
"project_name\\sql_script"
或类似的东西
using (SqlConnection mer = new SqlConnection(@"Data Source = server_address; Initial Catalog = server_name; Integrated Security=SSPI"))
{
{
mer.Open();
string path = Server.MapPath("~/mergeSQL.sql");
string mergeScript = System.IO.File.ReadAllText( path);
System.Collections.Generic.IEnumerable<string> commandStrings = Regex.Split(mergeScript, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
using (var command = new SqlCommand(commandString, mer))
{
command.ExecuteNonQuery();
}
Label2.Text = "Query merged";
}
}
}
}
}
windows 文件名很好,只是一个完整的路径字符串。
因此,如果您的 web 站点中有一个文件夹,请说:
sql_scripts
那么对于基于web的,他们是自动的
http:yourwebsite/sql_scripts/mysql.txt
但是,当然该文件夹不会公开。
请记住标记、基于 web 的 url 和隐藏代码之间的区别。
STILL 后面的代码 = plain jane 完整的 windows 路径名。
因此,在代码中您可以获得基站点和路径 - 无论项目在何处或在什么服务器上运行。
string MyFile = Server.MapPath(@"~/sql_scripts/myfile.txt")
以上将返回一个 FULL 限定的完整 windows 路径名。
虽然 web 站点 url 可能受到限制,但代码隐藏不是,并且 100% 忽略 web 站点安全设置。
因此,虽然上面不是相对路径名,但您不必在意,因为它将被翻译成完整的合法路径名,正如我所指出的,后面的所有代码都将使用(一个简单的平面 jane 完全限定的 windows 路径名).
所以,
web based markup = path name from and relative to web root
code behind = always a full legal path name to file.
因此,您可以使用 Server.MapPath 获取合法文件名+完整路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.