这是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Text.RegularExpressions;
using System.IO;
using unfreez_wrapper;
using Shell32;
namespace DownloadImages
{
public partial class Form1 : Form
{
string rainMapToRead;
string UrlsPath;
int counter;
UnFreezWrapper uf;
string localFilename;
string stringForSatelliteMapUrls;
string satelliteMapToRead;
List<string> StartTags;
List<string> LastTags;
List<string> Maps;
ExtractImages ei;
public Form1()
{
InitializeComponent();
using (WebClient client = new WebClient())
{
client.DownloadFile("http://www.sat24.com/foreloop.aspx?type=1&continent=europa#",localFilename + "rainMap.html");
client.DownloadFile("http://www.sat24.com/en/eu?ir=true", localFilename + "satelliteMap.html");
}
rainMapToRead = File.ReadAllText(localFilename + "rainMap.html");
satelliteMapToRead = File.ReadAllText(localFilename + "satelliteMap.html");
localFileName位于目录路径之前。 但是现在我没有定义它所以它是空的。 但即使它为null,rainMapToRead也不为null,并且能够找到并读取“rainMap.html”
我的意思是如果变量localFilename为null,文件下载到哪里? C: ? D :? 万一它是null什么是默认位置?
答案 0 :(得分:3)
连接null有效,你不会得到任何异常。这就是正在发生的事情
null + "satelliteMap.html" = "satelliteMap.html"
如果该位置是相对位置,则该文件将存储在exe的phisycal位置。
来自MSDN
相反,空字符串不引用System.String对象的实例,并且任何尝试在空字符串上调用方法都会导致NullReferenceException。但是,您可以在串联和比较操作中使用空字符串与其他字符串。
答案 1 :(得分:3)
因为此(null + " hello")
在C#
中是完全合法的表达式。
如果查看How to: Concatenate Multiple Strings (C# Programming Guide),您可以找到以下声明:
在字符串连接操作中,C#编译器处理null 字符串与空字符串相同,但不转换该值 原始的空字符串。
答案 2 :(得分:0)
concat(+
)运算符只将null
视为空字符串。
使用的路径是工作目录。
答案 3 :(得分:0)
默认位置与可执行文件的位置相同。
因此,如果您的可执行文件在C:\MyProgram\
运行,则WebClient
会将文件下载到C:\MyProgram\rainMap.html
..而您的rainMapToRead
将从C:\MyProgram\rainMap.html
读取
这是因为null + "String"
== "String"