public static TMoFile GetMoFile(string filename, TDebugLogger DebugLogger) { Int64 offset, size; // Find real filename offset = 0; size = 0; string realfilename = filename; if (filename.StartsWith(basedirectory)) { filename = filename.Substring(basedirectory.Length); int idx = filelist.IndexOf(filename); if (idx != -1) { TEmbeddedFileInfo fi = (TEmbeddedFileInfo)filelist.Objects[idx]; realfilename = TGnuGettextInstance.ExecutableFilename; offset = fi.offset; size = fi.size; #if DXGETTEXTDEBUG DebugLogger("Instead of " + filename + ", using " + realfilename + " from offset " + (offset).ToString() + ", size " + (size).ToString()); #endif } } #if DXGETTEXTDEBUG DebugLogger("Reading .mo data from file ''" + filename + "''"); #endif // Find TMoFile object TMoFile Result; MoFilesCS.AcquireWriterLock(Timeout.Infinite); try { string idxname = realfilename + " //\\ " + (offset).ToString(); int idx; if (MoFiles.Find(idxname, out idx)) { Result = (TMoFile)MoFiles.Objects[idx]; } else { Result = new TMoFile(realfilename, offset, size, TGnuGettextInstance.UseMemoryMappedFiles); MoFiles.AddObject(idxname, Result); } Result.Users++; } finally { MoFilesCS.ReleaseWriterLock(); } return(Result); }
public static bool FileExists(string filename) { if (filename.StartsWith(basedirectory)) { // Cut off basedirectory if the file is located beneath that base directory filename = filename.Substring(basedirectory.Length); } int idx; return(filelist.Find(filename, out idx)); }