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)
myGetImage
函数正常运行。当我尝试使用循环并传入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]);
已经解决了这个问题。谢谢你的帮助。