C#服务不将文件移动到正确的文件夹

时间:2018-05-20 03:42:58

标签: c# xml service

我已使用xml配置文件配置了Windows服务。该服务应该根据文件中的字段数确定csv文件所在的文件夹。字段数也决定了生成文件的软件版本,无论是版本3还是版本4.版本3 csv文件应该在它们自己的文件夹中进行,并且在版本4进行整理之前应该相同。目前这两个版本都是混合的,因此,整理过程会被破坏,并且Windows服务不会处理多个文件。以下是代码段的示例。当我运行Windows服务并检查事件查看器时,我不断收到catch语句中的错误 - “检查csv文件时出错”并将文件移动到异常文件夹而不是正确的文件夹。任何见解将不胜感激。

配置文件

<dip>
  <versions>
    <version number="4">
      <location path="C:\xRS\Output" />
      <numberOfFields>26</numberOfFields>
      <orderedfields>
        <type>string</type>
        <type>int</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
      </orderedfields>
    </version>
    <version number="3">
      <location path="C:\xRS\Output" />
      <numberOfFields>23</numberOfFields>
      <orderedfields>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>currency</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
        <type>string</type>
      </orderedfields>
    </version>
  </versions>
</dip>

检查CSV文件是否有特殊字符,并检查

生成的版本
private Boolean CheckCsvFile(String currentFile)
        {
            bool result = false;
            //bool proceed = false;
            int typeIndex;
            string currentLineValue;

            try
            {
                string[] line = File.ReadAllLines(currentFile);

                if (line.Length > 0)
                {
                    //remove all quotes
                    line[0] = Regex.Replace(line[0], "\"", String.Empty);

                    String[] lineValues = line[0].Split('\t');
                    //proceed = true;

                    eventLog1.WriteEntry("There are " + lineValues.Length + " columns in file");

                    XmlDocument dipConfig = new XmlDocument();
                    dipConfig.Load("DipConfig.xml");


                    foreach (XmlNode versions in dipConfig.DocumentElement.ChildNodes)
                    {
                        // string nodename = versions.Name;
                        foreach (XmlNode versionNode in versions)
                        {
                            typeIndex = 0;

                            //  nodename = versionNode.Name;
                            string versionNumber = versionNode.Attributes["number"].InnerText;
                            string locationPath = versionNode.ChildNodes[0].Attributes["path"].InnerText;
                            string numberOfFields = versionNode.ChildNodes[1].InnerText;

                            eventLog1.WriteEntry(String.Format("Processing version {0} with {1} number of fields", versionNumber, numberOfFields));

                            //if the number of fields for the version matches the columns from the line
                            if (int.Parse(numberOfFields) == lineValues.Length)
                            {

                                //check each value
                                foreach (XmlNode typeNode in versionNode.ChildNodes[2])
                                {
                                    currentLineValue = lineValues[typeIndex];

                                    //if the line value is not empty checked the field type
                                    if (!String.IsNullOrEmpty(currentLineValue))
                                    {
                                        if ("int".Equals(typeNode.InnerText.ToLower()))
                                        {
                                            int value;
                                            int.TryParse(currentLineValue, out value);
                                            lineValues[typeIndex] = value.ToString();
                                        }

                                        if ("currency".Equals(typeNode.InnerText.ToLower()))
                                        {
                                            lineValues[typeIndex] = Regex.Replace(currentLineValue, " ", String.Empty);
                                        }
                                    }

                                    typeIndex++; // increment the index
                                }

                                // write back the editted array to the current file
                                //construct the string

                                String EditedLine = String.Empty;
                                for (int i = 0; i < lineValues.Length; i++)
                                {
                                    EditedLine = @"\t" + lineValues[i];
                                }

                                try
                                {
                                    File.WriteAllText(currentFile, EditedLine);
                                }
                                catch
                                {
                                    eventLog1.WriteEntry("Error writing contents back to csv file");
                                }

                                result = true;
                                break; // break foreach loop
                            }

                        } //End For each version

                    } //End For Loop [versions]


                }
                return result;

            }
            catch (Exception ex)
            {
                eventLog1.WriteEntry("Erroe while checking CSV file");
                return result;
            }
        }

1 个答案:

答案 0 :(得分:0)

添加其他异常消息后,我收到了ArgumentOutOfBounds异常。我意识到我的版本3配置部分中有26个元素,当我应该有23个。删除最后3个元素后,一切顺利。