C#文件列表的顺序相反。 (不使用Linq)

时间:2015-01-13 11:23:31

标签: c#

我已经四处寻找,似乎唯一可以解决的问题就是使用LINQ,而我在2005年的视觉效果上并没有这样做。

我正在构建一个程序来读取文件并将它们导入到数据库中,就像它目前设置的那样,它会读取它找到的最新日期。

我想先阅读最早的文件。

有什么方法吗?

这是我的代码

     private string mDirectory; // this will hold the directory path you are working on
                    private string[] mFiles; // this will hold all files in the selected directory

    private void ReadData()
                    {
                    this.toolStripStatusLabel1.Text = "Preparing To Read Data";
                    this.Refresh();
                    string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};;persist security info=false;Extended Properties=dBase IV", mDirectory);
                    this.richTextBox1.Text = connectionString;
                    try
                    {
                    foreach (string file in mFiles)
                    {

 mDirectory = @"C:\USERS\DESKTOP\Test Pressure\"; 
                mFiles = System.IO.Directory.GetFiles(mDirectory, "*(WIDE).DBF");

                        DateTime dt = File.GetLastWriteTime(file);
                        string newdate = dt.ToString("yyyy-MM-dd HH:mm:ss");
                        DateTime DBTIME = new DateTime(2014, 01, 01, 00, 00, 00);
                        string date = String.Format("{0:yyyy-MM-dd HH:mm:ss}", DBTIME);
                        //this.richTextBox1.Text = date;


                        if (dt > DBTIME)
                        {
                            StringBuilder sb = new StringBuilder(300);
                            int n = GetShortPathName(file, sb, 300);
                            if (n == 0) // check for errors
                                MessageBox.Show(Marshal.GetLastWin32Error().ToString());
                            else
                            { }
                            string filenameWithoutPath1 = System.IO.Path.GetFileName(sb.ToString());
                            string queryString = string.Format("SELECT * FROM [" + "{0}]", filenameWithoutPath1);
                            this.richTextBox1.Text = queryString;


                        string where = " WHERE BAR > 20.0";
                        string myquery = queryString + where;
                       // this.richTextBox1.Text = myquery;

                        using (OleDbConnection connection = new OleDbConnection(connectionString))
                        {
                            OleDbCommand command = new OleDbCommand(myquery, connection);
                            connection.Open();
                            OleDbDataReader reader = command.ExecuteReader();

                            while (reader.Read())
                            {
                                if (reader.IsDBNull(1))
                                {
                                    this.richTextBox1.Text = "Null";
                                }
                                else
                                {



                            string Query = "REPLACE INTO hp42mis.hydrodata (FILEMOD, DOEYMD,TIMEHMS,DATETIMEM,MARKER,CONTRACT_CODE,STS_00" +
                                           ",PIPE,PIPE_NO,STS_01,MAX_PRESB,STS_02,MIN_PRESSB,STS_03,TESTP_BAR,STS_04,five,STS_05,six,STS_06,seven,STS_07," +
                                           "eight,STS_08,nine,STS_09) values ('" + newdate.ToString() + "',";


                                    Query += "'" + Convert.ToDateTime(reader["Date"]).ToString("yyyy-MM-dd") + "'";
                                    Query += ",'" + reader.GetValue(1).ToString() + "'";
                                    Query += ",'" + Convert.ToDateTime(reader["Date"]).ToString("yyyy-MM-dd") + " " + reader.GetValue(1).ToString() + "'";
                                    Query += ",'" + reader.GetValue(2).ToString() + "'";
                                    Query += ",'" + reader.GetValue(3).ToString() + "'";
                                    Query += ",'" + reader.GetValue(4).ToString() + "'";
                                    Query += ",'" + reader.GetValue(5).ToString() + "'";
                                    Query += ",'" + reader.GetValue(3).ToString() + "" + reader.GetValue(5).ToString() + "'";
                                    Query += ",'" + reader.GetValue(6).ToString() + "'";
                                    Query += ",'" + reader.GetValue(7).ToString() + "'";                             
                                    Query += ",'" + reader.GetValue(8).ToString() + "'";
                                    Query += ",'" + reader.GetValue(9).ToString() + "'";
                                    Query += ",'" + reader.GetValue(10).ToString() + "'";
                                    Query += ",'" + reader.GetValue(11).ToString() + "'";
                                    Query += ",'" + reader.GetValue(12).ToString() + "'";
                                    Query += ",'" + reader.GetValue(13).ToString() + "'";
                                    Query += ",'" + reader.GetValue(14).ToString() + "'";
                                    Query += ",'" + reader.GetValue(15).ToString() + "'";
                                    Query += ",'" + reader.GetValue(16).ToString() + "'";
                                    Query += ",'" + reader.GetValue(17).ToString() + "'";
                                    Query += ",'" + reader.GetValue(18).ToString() + "'";
                                    Query += ",'" + reader.GetValue(19).ToString() + "'";
                                    Query += ",'" + reader.GetValue(20).ToString() + "'";
                                    Query += ",'" + reader.GetValue(21).ToString() + "'";
                                    Query += ",'" + reader.GetValue(22).ToString() + "'";
                                    Query += ")";



                                    MySqlCommand cmd = new MySqlCommand(Query, conne);
                                    this.richTextBox1.Text = Query;
                                    this.Refresh();
                                    int res = 0;
                                    try
                                    {
                                        res = cmd.ExecuteNonQuery();
                                    }
                                    catch (MySqlException Myex)
                                    {
                                        MessageBox.Show(Myex.Message);
                                    }
                                    rowcounter++;
                                    this.rowcount.Text = rowcounter.ToString();
                                    this.Refresh();
                                    conne.Dispose();
                                    conne.Close();

                                }                      
                            }                      
                            reader.Close();
                            connection.Close();
                        }
                    }
                    }



                    }

                    catch (Exception ex)
                    {
                    MessageBox.Show(ex.Message);
                    }
                    }

4 个答案:

答案 0 :(得分:2)

我找到了一种更简单的方法来排序文件数组...

mFiles = System.IO.Directory.GetFiles(mDirectory, "*(WIDE).DBF");

Array.Sort(mFiles);

答案 1 :(得分:0)

如果您想根据每个文件的上次写入时间遍历mFiles数组,请参阅Sort List using string without Linq

private IList<string> GetOrderedFiles(string[] files)
{
    var fileList = new List<string>(files);

    Comparison<string> compare = delegate(string file1, string file2)
    {
        DateTime file1Time = File.GetLastWriteTime(file1);
        DateTime file2Time = File.GetLastWriteTime(file2);

        return file1Time.CompareTo(file2Time);
    };

    fileList.Sort(compare);
    return fileList;
}

用法:

var sortedFiles = GetOrderedFiles(mFiles);

foreach (string file in sortedFiles)
{

}

答案 2 :(得分:0)

正如其他人所说的那样,该代码需要重新格式化,甚至可能不正确(例如,您在循环中设置mFiles迭代mFiles)。

但是,这可能会有所帮助吗?

Sorting Directory.GetFiles()

关键是使用FileInfo项而不仅仅是GetFiles()。

答案 3 :(得分:0)

你可以这样做:

public class ReverseComparer : IComparer<FileSystemInfo>
        {
            public int Compare(FileSystemInfo x, FileSystemInfo y)
            {
             return x.CreationTime.CompareTo(y); 
            }
    }




 DirectoryInfo di = new DirectoryInfo("C:\\...");
 FileSystemInfo[] files = di.GetFileSystemInfos();
 Array.Sort(files, new ReverseComparer());