我已经多次验证文件是否存在,并且当我将代码中的文件路径从代码复制并粘贴到Windows资源管理器中时,它可以工作。它带我到文件。所以请帮忙,这是怎么回事?异常消息,供您参考
System.IO.FileNotFoundException:找不到文件“ /C:\Users\Daniel\Desktop\Couryah\products_export.csv
为什么这个斜杠在前面?是罪魁祸首吗?我该如何解决?
public void PopulateList()
{
string line;
System.IO.StreamReader file = new System.IO.StreamReader("C:\\Users\\Daniel\\Desktop\\Couryah\\products_export.csv");
while ((line = file.ReadLine()) != null)
{
Product newProduct = new Product();
newProduct.setAll(line.Split(',')[1], line.Split(',')[3], Convert.ToDouble(line.Split(',')[19].Replace("$", "")), line.Split(',')[24]);
productList.Add(newProduct);
}
}
答案 0 :(得分:0)
我会预先检查以确保文件存在。放入变量中只是为了确保没有带有错误正斜杠的false / false值。然后,检查文件是否存在,然后在打开之前进行确认。
接下来,我不再使用流,而是更改为File.ReadAllLines(),它一次将每一行读入一个数组。
public void PopulateList()
{
var whatFile = "C:\\Users\\Daniel\\Desktop\\Couryah\\products_export.csv";
if ( ! System.IO.File.Exists( whatFile ))
{
MessageBox.Show("No such file: " + whatFile);
return;
}
foreach( var line in System.IO.File.ReadAllLines( whatFile ))
{
Product newProduct = new Product();
newProduct.setAll(line.Split(',')[1], line.Split(',')[3], Convert.ToDouble(line.Split(',')[19].Replace("$", "")), line.Split(',')[24]);
productList.Add(newProduct);
}
}
现在,这并不一定能回答为什么文件不存在的问题,但这是我专门碰到的一件事,正在从我的脑海中刮the。我有一个类似的客户。我在桌面上有一个csv文件,但无论如何,都存在相同的问题。
我实际上发现的是文件“ MyFile.csv”实际上是“ MyFile.csv.txt”。想知道是什么...最终进入DOS命令提示符,更改为文件夹,并对该文件夹进行了DIR查看。
来找吧,Windows喜欢使用默认的常见文件扩展名“隐藏文件名后缀”。因此,即使桌面上具有.csv,也因为隐藏了.txt而导致找不到文件。为了确认,我将文件管理器更改为NOT HIDE文件名后缀。果然,剥离了.txt,一切正常。
并不是说这就是你所拥有的,但是有时候显而易见的不是。
还有一个便条。我会在您的调试器中放置一个断点,以在检查文件时停止。然后,使用监视窗口查看变量是什么,并根据需要检查/更改以确认其按照您的预期进行。
一个附加选项...
尝试使用WINDOWS认为的桌面。
var whatFile2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Couryah\\products_export.csv")
此“ SpecialFolder.Desktop”与您的C:\ users相比如何?