2016-11-07 17 views
0

因此,我們正在對我們的網站進行大修。目前,文章,帖子等是服務器上的文件,現在我們需要數據庫中的文件內容。在測試時,我們需要定期獲取新的文件內容。想在GetFiles期間跳過文件

這裏是我已經(我只是包括articleConvertedPath

var articlesConvertedPath = @"D:\articles\ArticlesConverted"; 
var articlesConvertedDir = new DirectoryInfo(articlesConvertedPath); 
var articlesConvertedFiles = articlesConvertedDir.GetFiles(); 

var dirInfo = new DirectoryInfo(@"D:\articles); 
var sqlConnectionString = ConfigurationManager.ConnectionStrings[dbSelected].ConnectionString; 
var con = new SqlConnection(sqlConnectionString); 
con.Open(); 

foreach (var currFile in dirInfo.GetFiles(".asp", SearchOption.TopDirectoryOnly)) 
{ 
if (!articlesConvertedFiles.Contains(currFile)) 
{ 
    using (StreamReader sr = new StreamReader(currFile.FullName)) 
    { 
     OutputTextBox.Text += currFile.Name.Replace(".asp", string.Empty) + "\r\n"; 
     var articleText = sr.ReadToEnd() 
      .Replace("<!--#include file=\"../include/engine_article_header.asp\"-->", string.Empty) 
      .Replace("<!--#include file=\"../include/engine_article_footer.asp\"-->", string.Empty); 

     using (SqlCommand command = new SqlCommand("UpdateArticleContent", con)) 
     { 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.Add("@ArticleID", SqlDbType.VarChar).Value = currFile.Name.Replace(".asp", string.Empty); 
      command.Parameters.Add("@ArticleText", SqlDbType.VarChar).Value = articleText; 
      command.ExecuteNonQuery(); 
     } 
    } 
    var copyFilePath = string.Format(@"D:\articles\ArticlesConverted\{0}", currFile.Name); 
    File.Copy(currFile.FullName, copyFilePath); 
} 

你可以看到,我試圖做的!articlesConvertedFiles.Contains(currFile),但真的不工作以及程序還是有以獲得每個文件(超過18k文件)

問題:有沒有反正這可以改進?只是你知道,這是我們使用之前,我們使用的開發工具,所以代碼doesn' t需要看起來很漂亮

任何方式......謝謝!

回答

1

您應該使用EnumerateFiles這將僅僅只加載所需的文件,方式如下:

foreach(var currFile in dirInfo.EnumerateFiles(".asp", SearchOption.TopDirectoryOnly) 
           .Where(x=> !articlesConvertedFiles.Contains(x)) 
{ 
} 

這樣做的另一個好處是,該文件中的信息將被加載時,foreach循環將開始它的第一次迭代。

+0

謝謝!但由於某種原因,它從來沒有碰到任何事情 – ajtatum