私はこのコードを作成しました:
string[] paths = GetFiles(dir).ToArray();
int numberOfFiles = paths.Length;
int i = 0;
while (i < numberOfFiles - 1)
{
scanfile(paths[i]);
i++;
}
GetFiles の場合:
static IEnumerable<string> GetFiles(string path) {
Queue<string> queue = new Queue<string>();
queue.Enqueue(path);
while (queue.Count > 0)
{
path = queue.Dequeue();
try
{
foreach (string subDir in Directory.GetDirectories(path))
{
queue.Enqueue(subDir);
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
}
string[] files = null;
try
{
files = Directory.GetFiles(path);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
}
if (files != null)
{
for (int i = 0; i < files.Length; i++)
{
yield return files[i];
}
}
}
}
public string scanfile(string path)
{
int offset = 0;
int length = 0;
byte[] buffer;
var variable1 = new StringBuilder();
FileInfo fi = new FileInfo(path);
length = (int)fi.Length;
using (var mmf1 = MemoryMappedFile.CreateFromFile(path,
FileMode.OpenOrCreate, null, offset + length))
{
// Create reader to MMF
using (var reader = mmf1.CreateViewAccessor(300,
4000, MemoryMappedFileAccess.Read))
{
// Read from MMF
buffer = new byte[4000];
reader.ReadArray<byte>(0, buffer, 0, 4000);
}
}
return variable1.ToString();
}
PS: Get Files 私も Stack Overflow から取ってきました。
ただし、ディレクトリ内のファイルを最初に計算するため、ディレクトリ内の多くのファイルに使用すると非常に遅くなります。
これらのコードを最適化するのを手伝ってくれませんか?