1) non è una chat, se nessuno risponde vuol dire che nessuno sa o nessuno che sa ha letto

2) devi usare la createfile delle windows api che ti restituisce un intptr nullo se il file è loccato

ecco un esempio in c# però:

codice:
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint FILE_SHARE_READ = 0x1;
public const uint FILE_SHARE_WRITE = 0x2;
public const uint FILE_ATTRIBUTE_NORMAL = 0x80;
public const uint OPEN_EXISTING = 0x3;
public const uint CREATE_ALWAYS = 0x2;

[DllImport("kernel32.dll", SetLastError = true)]
 internal static extern IntPtr CreateFile(String lpFileName,
                                                   UInt32 dwDesiredAccess, UInt32 dwShareMode,
                                                   IntPtr lpSecurityAttributes, 
                                                   UInt32 dwCreationDisposition,
                                                   UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile);

public static bool FileIsLocked(string FileName)
        {
            bool res = false;

            IntPtr hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 
                                             IntPtr.Zero,           
                                             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero);
            if (hFile.ToInt32() > 0)
            {
                res = false;
            }
            else
            {
                res = true;
            }
            CloseHandle(hFile);
            return res;
        }