2016-11-07 11 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)が含まれているものですが、プログラムはまだ持っているとして、それは本当にうまく動作しません。私たちがライブに行く前に使用していた開発ツールですので、コードはそれほど難しくありません。きれいに見える必要があります。

方法...ありがとう!

答えて

1

あなただけの唯一の方法は、次の必要なファイルをロードしますEnumerateFilesを使用する必要があります。

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

本のもう一つの利点は、foreachループは、それが最初の繰り返しですが開始されますと、ファイル情報がロードされることになります。

+0

ありがとうございました!しかし何らかの理由で、foreach内の何かを決して叩くことはありません – ajtatum

関連する問題