C# WebClient下载文件路径中包含非法字符

C# WebClient下载文件路径中包含非法字符,c#,image,csv,C#,Image,Csv,我是个新手,所以我确信这是我所缺少的一些基本的东西 我有一个简单的程序来运行csv文件,该文件包含指向图像的链接,以将这些图像保存在指定的保存文件位置 我正在将包含url的单元格解析为列表 如果我把GetImage(@)http://www.example.com/picture.jpg“,1)myGetImage函数正常运行。当我尝试使用循环并传入str[0]变量时,我收到一个关于路径中非法字符的错误 我使用了一个MessageBox来告诉我区别是什么,据我所知,当我将str[0]传递到函数中

我是个新手,所以我确信这是我所缺少的一些基本的东西

我有一个简单的程序来运行
csv
文件,该文件包含指向图像的链接,以将这些图像保存在指定的保存文件位置

我正在将包含
url
的单元格解析为
列表

如果我把
GetImage(@)http://www.example.com/picture.jpg“,1)
my
GetImage
函数正常运行。当我尝试使用循环并传入
str[0]
变量时,我收到一个关于路径中非法字符的错误

我使用了一个
MessageBox
来告诉我区别是什么,据我所知,当我将
str[0]
传递到函数中时,它会添加双引号(即“http://www.example.com“显示,而不是仅发送一个字符串时的显示

我做错了什么

private void button2_Click(object sender, EventArgs e)
    {
        string fileName = textBox1.Text;            
        folderBrowserDialog1.ShowDialog();
        string saveLocation = folderBrowserDialog1.SelectedPath;
        textBox2.Text = saveLocation;            
        List<string[]> file = parseCSV(fileName);
        int count = 0;
        foreach (string[] str in file)
        {
            if (count != 0)
            {                                                          
                GetImage(str[0], str[4]);                    
            }
            count++;
        }
        //GetImage(@"http://www.example.com/picture.jpg", "1");
    }


    private void GetImage(string url, string prodID)
    {   
        string saveLocation = textBox2.Text + @"\";;
        saveLocation += prodID + ".jpg";                        
        WebClient webClt = new WebClient();
        webClt.DownloadFile(url, saveLocation);                         
    }
private void按钮2\u单击(对象发送者,事件参数e)
{
字符串文件名=textBox1.Text;
folderBrowserDialog1.ShowDialog();
string saveLocation=folderBrowserDialog1.SelectedPath;
textBox2.Text=保存位置;
列表文件=解析CSV(文件名);
整数计数=0;
foreach(文件中的字符串[]str)
{
如果(计数!=0)
{                                                          
GetImage(str[0],str[4]);
}
计数++;
}
//GetImage(@)http://www.example.com/picture.jpg", "1");
}
私有void GetImage(字符串url、字符串prodID)
{   
字符串saveLocation=textBox2.Text+@“\”;;
saveLocation+=prodID+“.jpg”;
WebClient webClt=新的WebClient();
下载文件(url,保存位置);
}

无论哪个函数或方法创建这些引号,您都可以将它们全部替换

String myUrl = str[0];
myUrl = myUrl.Replace("\"", "");
GetImage(myUrl, str[4]);
我认为您的文件包含引号,或者是由parseCSV方法创建的

更新:

我使用了这段代码,没有任何问题,也没有引用:

static void Main(string[] args)
{
  string fileName = "Test";
  //folderBrowserDialog1.ShowDialog();
  string saveLocation = ".\\";
  //textBox2.Text = saveLocation;
  List<string[]> file = new List<string[]>
  {
    new string[] { "http://www.example.com", "1", "1", "1", "1"},
    new string[] { "http://www.example.com", "2", "2", "2", "2"},
  };
  int count = 0;
  foreach (string[] str in file)
  {
    if (count != 0)
    {
        GetImage(str[0], str[4]);
    }
    count++;
  }
//GetImage(@"http://www.example.com/picture.jpg", "1");
}


private static void GetImage(string url, string prodID)
{
  string saveLocation = ".\\"; // textBox2.Text + @"\"; ;
  saveLocation += prodID + ".jpg";
  WebClient webClt = new WebClient();
  Console.WriteLine(url);
  webClt.DownloadFile(url, saveLocation);
}
static void Main(字符串[]args)
{
字符串fileName=“Test”;
//folderBrowserDialog1.ShowDialog();
字符串saveLocation=“.\\”;
//textBox2.Text=保存位置;
列表文件=新列表
{
新字符串[]{”http://www.example.com", "1", "1", "1", "1"},
新字符串[]{”http://www.example.com", "2", "2", "2", "2"},
};
整数计数=0;
foreach(文件中的字符串[]str)
{
如果(计数!=0)
{
GetImage(str[0],str[4]);
}
计数++;
}
//GetImage(@)http://www.example.com/picture.jpg", "1");
}
私有静态void GetImage(字符串url、字符串prodID)
{
字符串saveLocation=“.\\”;//textBox2.Text+@“\”;
saveLocation+=prodID+“.jpg”;
WebClient webClt=新的WebClient();
Console.WriteLine(url);
下载文件(url,保存位置);
}

您的CSV文件是否可能包含双引号?那么您应该替换它们…我的CSV文件没有双引号…可能问题在于
saveLocation
?最好使用
Path.Combine()
作为路径(比
textBox2.Text+@“\”+prodID+.jpg”
)。您能检查一下saveLocation的值吗?如果我注释掉foreach循环并取消注释GetImage(@“”“1”),它会正确保存文件,因此我认为它不是saveLocation。尽管我会研究如何更改保存它的方式。试着调用
webClt.DownloadFile(新Uri(url),saveLocation);
,似乎有些输入不是有效的URI。尝试过了,没有区别。我的csv文件没有引号(除非它们以某种方式隐藏)。而且我非常确定它们没有被放在parseCSV上。
使用(StreamReader readFile=new StreamReader(pth)){string line;string[]行;while((line=readFile.ReadLine())!=null){row=line.Split(',');parsedData.Add(row);}
它之所以有效,是因为您明确定义了字符串[]。我的问题是当它从parseCSV获取字符串时。我试图在上一条评论中发布该代码,但结果有点糟糕。我只是不知道引号来自何处,以及为什么string replace没有删除它们。嗯,出于某种原因,当我按照您最初的建议在发送之前尝试替换它时,它没有工作k、 但是我发现:
GetImage(str[0]。Replace(“\”,”),str[4]);
已经解决了这个问题。谢谢你的帮助。