为什么Visual Studio说我的文件显然不存在?另外,添加正斜线是否重要?

时间:2019-04-21 22:07:25

标签: c# filepath

我已经多次验证文件是否存在,并且当我将代码中的文件路径从代码复制并粘贴到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);
    }
}

1 个答案:

答案 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相比如何?