我有此代碼:文件在C#中搜索
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();
}
P.S:找我把它從堆棧溢出過的文件。
但是,如果我將它用於目錄中的許多文件時速度很慢,因爲它首先計算目錄中的文件。
你能幫我優化這些代碼嗎?
這段代碼不會「非常慢」 - 它將是無限的,因爲你永遠不會改變'i'或'numerOfFiles'的值。這表明這不是你的真實代碼,這使得很難進一步診斷你的問題。 –
另外,你似乎沒有顯示'scanfile'或'GetFiles'的功能,以及爲什麼你需要它在一個數組中? – Arran
我會建議這個答案:http://stackoverflow.com/questions/724148/is-there-a-faster-way-to-scan-through-a-directory-recursively-in-net/724184#724184 –