关于c#中加载图片路径的代码。前10行没看懂是如何确定图片路径的,求详细解答
private void Form1_Load(object sender, EventArgs e)
{
string Path = Application.StartupPath.Substring(0,Application.StartupPath.Substring(0,Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\")); //设置要加载图片的路径
Path += @"\01.jpg";
string Path2 = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
Path2 += @"\02.jpg"; //@是什么意思啊
Image Ming = Image.FromFile(Path,true);
imageList1.Images.Add(Ming);
Image Ming2 = Image.FromFile(Path2,true);
imageList1.Images.Add(Ming2);
imageList1.ImageSize = new Size(200,165);
pictureBox1.Width = 200;
pictureBox1.Height = 165;
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[0];
}
private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[1];
} 展开
@的意思是忽略字符中的转义符,举个例子,比如有路径是c:\temp\123.txt,就不能直接写成
string str="c:\temp\123.txt";
这样编译时就会报错,因为它以为你是要转义,而不是要\这个字符,所以要写成
string str="c:\\temp\\123.txt";
或者是
string str=@"c:\temp\123.txt";
至于string Path = Application.StartupPath.Substring(0,Application.StartupPath.Substring(0,Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
是取当前运行的exe所在目录的上两级目录的位置,比如说当前的程序的exe在
c:\temp\abc\123\sample.exe
用上面的就会取到c:\temp
其实完全没必要这么写,因为上级目录是可以用..表示的,所以这句实际上相当于
string Path=Application.StartupPath + @"\..\..";
至于Substring以及LastIndexOf都是基础的c#语法,没什么好说的,自己查查就知道了。
原代码有太多没用的重复部分,改动过后代码
private void Form1_Load(object sender, EventArgs e)
{
string home=Application.StartupPath + @"\..\.."; //设置要加载图片的路径
string file1 =home+ @"\01.jpg";
string file2=home+ @"\02.jpg";
imageList1.Images.Add(Image.FromFile(file1,true));
imageList1.Images.Add(Image.FromFile(file2,true));
imageList1.ImageSize = new Size(200,165);
pictureBox1.Width = 200;
pictureBox1.Height = 165;
}
就是返回程序启动目录的上二层目录,但是写的相当的复杂而且不安全,如果路径只有一层,那就异常了。
var path的上层路径 = path.Substring(0, path.LastIndexOf("\\"));
那么
Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"))
是嵌套调用了2次
展开效果如下
var 启动目录 = Application.StartupPath;
var 启动目录上层目录 = 启动目录.Substring(0, 启动目录.LastIndexOf("\\"));
var 启动目录上层目录的上层目录 = 启动目录.Substring(0, 启动目录上层目录.LastIndexOf("\\"));
var Path = 启动目录上层目录的上层目录;
象下面这调用上层目录会安全一些
/// <summary>
/// 返回指定目录的上一层目录路径,如果不存在返回null
/// </summary>
public static string GetParentDirctory(string dirctory)
{
var directoryInfo = Directory.GetParent(dirctory);
if (directoryInfo != null)
{
return directoryInfo.FullName;
}
else
{
return null;
}
}
但是我知道 @的意思。
@后面的代码里不会进行转义。
因为读取目录 会有个斜杠 \ ,但平时这个 \ 是表示转义的
比如string str1="C:\a\b\n";这样的话是无法进入n目录的,因为\n会转义,当成换行处理。
string str1=@"C:\a\b\n";这样的话就进入n目录的,@表示不它后面的代码不进行转义。
2014-07-20