我希望我的代码只从相对路径抓取我的sql脚本,从我的项目文件夹开始,而不是从绝对路径。我正在使用web表单,并计划在服务器上发布此代码,因此我需要按路径取消引用。
CurrentDomain.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";
}
}
}
}
}发布于 2022-11-24 23:40:54
windows文件名很好,只是一个完整的路径字符串。
因此,如果您的网站中有一个文件夹,请说:
sql_scripts那么对于基于web的,它们是自动的。
http:yourwebsite/sql_scripts/mysql.txt但是,该文件夹当然不会公开。
并且要记住标记、基于web的url和后面的代码之间的区别。
后面的代码仍然=普通简完整的窗口路径名称。
因此,在代码中,您可以获得基本站点和路径--不管项目运行在哪里或哪个服务器。
string MyFile = Server.MapPath(@"~/sql_scripts/myfile.txt")上面的内容将返回一个完全限定的窗口路径名。
虽然网站网址可能受到限制,但背后的代码不是,并且100%忽略网站安全设置。
所以,虽然上面不是一个相对路径名,但是您并不关心,因为它将被转换成一个完整的合法路径名,正如我所提到的,后面的所有代码都是使用的(一个简单的平面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获得合法文件名+完整路径
https://stackoverflow.com/questions/74533926
复制相似问题