private FileAttributes GetFromReader(SqliteDataReader reader)
        {
            FileAttributes attr = new FileAttributes();

            attr.UniqueId      = GuidFu.FromShortString(reader.GetString(0));
            attr.Path          = System.IO.Path.Combine(reader.GetString(1), reader.GetString(2));
            attr.LastWriteTime = StringFu.StringToDateTime(reader.GetString(3));
            attr.LastAttrTime  = StringFu.StringToDateTime(reader.GetString(4));
            attr.FilterName    = reader.GetString(5);
            attr.FilterVersion = int.Parse(reader.GetString(6));

            if (attr.FilterName == "")
            {
                attr.FilterName = null;
            }

            return(attr);
        }
        public FileAttributes Read(string path)
        {
            if (Disable)
            {
                return(null);
            }

            try {
                string tmp = ExtendedAttribute.Get(path);

                if (tmp == null)
                {
                    return(null);
                }

                string[] csv = tmp.Split(',');

                if (int.Parse(csv [0].Substring(0, 2)) != EA_VERSION ||
                    (index_fingerprint != null && csv [0].Substring(3) != index_fingerprint))
                {
                    return(null);
                }

                FileAttributes attr = new FileAttributes();
                attr.UniqueId      = GuidFu.FromShortString(csv [1]);
                attr.Path          = path;
                attr.LastWriteTime = StringFu.StringToDateTime(csv [2]);
                attr.LastAttrTime  = StringFu.StringToDateTime(csv [3]);

                if (!String.IsNullOrEmpty(csv [4]))
                {
                    attr.FilterVersion = int.Parse(csv [4].Substring(0, 3));
                    attr.FilterName    = csv [4].Substring(4);
                }

                return(attr);
            } catch (Exception e) {
                //Logger.Log.Debug ("Caught exception reading EAs from {0}", path);
                //Logger.Log.Debug (e);
                // FIXME: Do something smarter with the exception.
                return(null);
            }
        }