8 EYLÜL 2008, PAZARTESİ
Dosya kilidi açılana kadar bekleyin .NET
Bir dosya kilitli ve okumak için erişilebilir ve yeniden adlandırma kadar bir iş parçacığı engelleme en basit yolu nedir? Örneğin, orada bir WaitOnFile() yerde .NET Çerçeve?
Bir FileSystemWatcher FTP bir site, ama aktarılacak olan dosyaları aramak için kullandığı bir hizmeti vardosya oluşturulmuşdiğer işleminden önce olayı harekete dosya yazma işlemi bittikten.
İdeal çözüm iplik sonsuza kadar vazgeçmeden önce açılmıyor yani bir zaman aşımı süresi var.
Edit: bazı çözümler aşağıda denedikten Sonra o kadar değişen sona erdisistemtüm dosyalar için yazdı Path.GetTempFileName()
, o zaman son konumuna File.Move()
yapıldı. FileSystemWatcher
olay kovduğunda, dosya zaten tamamlanmıştı.
CEVAP
8 EYLÜL 2008, PAZARTESİ
Bu related question verdiğim cevap şuydu:
/// <summary>
/// Blocks until the file is not locked any more.
/// </summary>
/// <param name="fullPath"></param>
bool WaitForFile(string fullPath)
{
int numTries = 0;
while (true)
{
numTries;
try
{
// Attempt to open the file exclusively.
using (FileStream fs = new FileStream(fullPath,
FileMode.Open, FileAccess.ReadWrite,
FileShare.None, 100))
{
fs.ReadByte();
// If we got this far the file is ready
break;
}
}
catch (Exception ex)
{
Log.LogWarning(
"WaitForFile {0} failed to get an exclusive lock: {1}",
fullPath, ex.ToString());
if (numTries > 10)
{
Log.LogWarning(
"WaitForFile {0} giving up after 10 tries",
fullPath);
return false;
}
// Wait for the lock to be released
System.Threading.Thread.Sleep(500);
}
}
Log.LogTrace("WaitForFile {0} returning true after {1} tries",
fullPath, numTries);
return true;
}
Bunu Paylaş:
Ne kadar büyük dosya okumak için pytho...
Ne kadar etkili Vim birden fazla dosya...
Gelecek< herhangi kadar bekleyin;T&g...
Ne kadar büyük bir MS SQL ithal ediyor...
Nasıl dosya kilidi kontrol etmek için?...