Bir dosya için benzersiz bir tanımlayıcıyı almak üzere, 2009'da yazılmış olan here numaralı telefona çok benzeyen bir çözüm uygulamaya ihtiyacım var. Özellikle, ben cevabım ApproachB()
fonksiyonu bakıyorum ve çizgi izleyen (yeni C# yetenekleri yansıtmak için biraz yeniden yazılmış):HANDLE (IntPtr) Eski, kernel32.dll, IntPtr için SafeFileHandle
var fi = new FileInfo(@"C:\Temp\testfile.txt");
var fs = fi.Open(FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
WinAPI.GetFileInformationByHandle(fs.Handle, out objectFileInfo); // fs.Handle being the portion in question
sorunu, burada, bir extern
işlevine GetFileInformationByHandle haritalar ithal olmasıdır "kernel32.dll". şöyle imzası:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool GetFileInformationByHandle(IntPtr hFile, out BY_HANDLE_FILE_INFORMATION lpFileInformation);
Tipi yukarıda bağlantılı doc.s HANDLE
belirtilen tipe de IntPtr
haritalar. Ancak, FileStream
nesnesindeki Handle
özelliğinin kullanımdan kaldırılmış (obsolete olarak yapılmış) ve IntPtr
eşlemesiyle eşleştirilmediği SafeFileHandle
ile değiştirilmiştir.
extern
tanım türünü SafeFileHandle
kabul nerede bu üstesinden gelmek için bir yol var mı? Veya, bu amaçla uygulanan başka bir extern
yöntemi var mı?