1

私のアプリケーションでは、このような状況があります。ファイルを作成する前に、私のアプリケーションは特定のファイル名の下のディレクトリ内のファイルを検索します。ファイルが見つかった場合は、各ファイルの内容を読み取り、(各ファイルの) これらの内容を新しいファイルに書き込む必要があります。私は多くをグーグルで検索し、次のようなものを試しました:

string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH");

string[] files = Directory.GetFiles(path,temp_file_format);
foreach (FileAccess finfo in files)
{
 string text = File.ReadAllText(finfo);
}

System.IO.DirectoryInfo dir = new DirectoryInfo(path);
System.IO.FileInfo[] files = dir.GetFiles(temp_file_format);
foreach (FileInfo finfo in files)
{
  finfo.OpenRead();
}

しかし、これらはすべて失敗しました..誰かがこれに代わるものを教えてもらえますか?

temp_file_format 文字列に何か問題がありますか?

これらの内容を新しいファイルの前に追加できればいいのですが。それ以外の場合も、心配はいりません..

どんな助けでも本当に感謝します..

4

4 に答える 4

2

これは、そのすべてを実行する競合する実装です。

  • 一度にメモリ内のすべてを読み取ることなく (これは大きなファイルでは機能しません)
  • 必要な時間以上ファイルを開いたままにしない
using System.IO;
using System.Linq;

public static class Program { 
    public static void Main()
    {
        var all = Directory.GetFiles("/tmp", "*.cpp")
             .SelectMany(File.ReadAllLines);

        using (var w = new StreamWriter("/tmp/output.txt"))
            foreach(var line in all)
                w.WriteLine(line);
    }
}

私は mono 2.10 でテストしましたが、任意の .NET 4.0 以降で動作するはずです (File.ReadAllLinesこれは行ごとに列挙可能な遅延型です)。

于 2013-09-13T08:55:11.070 に答える
1

すべてのファイルを読み取り、それらをパスに出力する短いスニペットを次に示します。outputPath

var lines = from file in  Directory.GetFiles(path,temp_file_format)
            from line in File.ReadAllLines(file)
            select line;
File.WriteAllLines(outputPath, content);

コードで発生している問題は、実際にはファイルの読み取りとは関係ありませんが、オブジェクトを型として使用しようとしているだけではありません。andDirectory.GetFilesの配列を返し、パスが文字列であることを期待します。したがって、パス引数として返された各文字列を適切なメソッドに渡すだけです。上記はその一例です。問題を解決し、コードの実際の問題を説明するのに役立つことを願っていますstringFile.ReadXXXFile.OpenRead

于 2013-09-13T08:59:11.643 に答える
0
using (var output = File.Create(outputPath))
{
    foreach (var file in Directory.GetFiles(InputPath,temp_file_format))
    {
        using (var input = File.OpenRead(file))
        {
            input.CopyTo(output);
        }
    }
}
于 2013-09-13T08:53:47.210 に答える
0

これを試して:

foreach (FileInfo finfo in files)
{
try
    {

        using (StreamReader sr = new StreamReader("finfo "))
        {
            String line = sr.ReadToEnd();
            Console.WriteLine(line);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(e.Message);
    }
 }
于 2013-09-13T08:47:03.920 に答える