C# 方法无法从.csv读取所有行

C# 方法无法从.csv读取所有行,c#,csv,C#,Csv,我们有一个应用程序,用于管理对VOIP系统的更改。它使用CSV上传,该CSV由控制手机的CISCO系统的自定义导出构建。我认为,在.csv文件中有一个错误的行,其中有一个“-”字符,它失败了,即删除该字符使文件能够一直处理。读取文件的方法由StreamReader提供,StaticConfig对象是存储每行记录的实体。这是读取.csv的行的方法: while ((LineBuffer = sr.ReadLine()) != null) {

我们有一个应用程序,用于管理对VOIP系统的更改。它使用CSV上传,该CSV由控制手机的CISCO系统的自定义导出构建。我认为,在.csv文件中有一个错误的行,其中有一个“-”字符,它失败了,即删除该字符使文件能够一直处理。读取文件的方法由StreamReader提供,StaticConfig对象是存储每行记录的实体。这是读取.csv的行的方法:

   while ((LineBuffer = sr.ReadLine()) != null)
                {
                    // loop through all lines found in file
                    string[] tmpString = LineBuffer.Split(Convert.ToChar(","));
                    if (tmpString[0] != "")
                    {
                        StaticConfig staticEntry = new StaticConfig();
                        int extension;
                        if (Int32.TryParse(tmpString[0].Trim(), out extension))
                        {
                            staticEntry.DirectoryNumber = extension;
                            staticEntry.Building = tmpString[9].Trim();
                            staticEntry.LongDistance = (tmpString[7].Trim() == "1");
                            staticEntry.ClassRestricted = (tmpString[6].Trim() == "1");
                            staticEntry.VoiceMail = (tmpString[8].Trim() == "1");
                            staticEntry.Location = tmpString[5].Trim();
                            staticEntry.UserFName = tmpString[1].Trim();
                            staticEntry.UserLName = tmpString[2].Trim();
                            staticEntry.UserID = tmpString[3].Trim();
                            staticEntry.EmployeeNumber = tmpString[4].Trim();
                            staticEntry.UploadDate = uploadTime;

                            //Get the locationID
                            var LocationID = (from l in voipDB.Locations
                                              where l.LocationName == staticEntry.Building
                                              select l.LocationID).FirstOrDefault();

                            if (LocationID != Guid.Empty)
                                staticEntry.LocationID = LocationID;
                            else
                            {
                                Location newLocation = new Location();
                                newLocation.LocationID = Guid.NewGuid();
                                newLocation.LocationName = staticEntry.Building;
                                newLocation.IsLocked = false;
                                newLocation.IsSubmitted = false;

                                voipDB.AddToLocations(newLocation);
                                staticEntry.LocationID = newLocation.LocationID;
                                voipDB.SaveChanges();
                            }

                            voipDB.StaticConfigs.AddObject(staticEntry);
                            processed++;
                        }
                    }
                }

但对我来说,这在“-”字符上失败是毫无意义的,所以我觉得我错过了什么。查看.Split和Convert.ToChar的MSDN报告,我没有看到任何失败的情况。谁能告诉我为什么会失败,或者在哪里?关于这方面有什么有用的信息来源吗?非常感谢

您能否提供一个失败的最小CSV示例?您可能有一个包含逗号的带引号的值,这段代码无法正确处理,因为它只是在逗号上拆分,而不考虑它们在每行中出现的位置。有关更健壮的CSV解析,请参阅。您说此代码失败,但没有明确解释它是如何失败的。你收到错误信息了吗?如果是,此消息是什么?你有没有试着/抓住这些线?这就是问题所在。它没有给我任何错误信息。只是读的行比它应该读的少。在某些情况下,成百上千的人没有明确的迹象表明它在任何一行失败的原因。删除这一行后,它正确地读取了.csv的所有行:(ext),emptage,-RM D22,,,D22,1,0,0,(school)我也可以给你一个示例csv,但我实际上不知道如何将它附加到这里?你需要每一行至少由10个子字符串组成(你使用索引9)你确定你的行都由10个子字符串组成吗?