private PutioFsItem FindPutioFSItem(String path) { // TODO: Remove this workaround: if (Path.GetFileName(path) == "desktop.ini") { return(null); } PutioFolder result = this.Mounter.PutioFileSystem.Root; foreach (String dir_name in PutioDokanOperations.GetPathElements(Path.GetDirectoryName(path))) { result = result.GetFolder(dir_name); if (result == null) { return(null); } } String filename = Path.GetFileName(path); if (filename != "") { return(result.GetItem(filename)); } return((PutioFsItem)result); }
public int FindFiles(String filename, ArrayList files, DokanFileInfo info) { Stopwatch sw = new Stopwatch(); sw.Start(); logger.Debug("FindFiles on {0} by {1}", filename, info.ProcessId); PutioFsItem item = this.FindPutioFSItem(filename); if (item == null || !item.IsDirectory) { return(DokanNet.ERROR_PATH_NOT_FOUND); } PutioFolder folder = (PutioFolder)item; foreach (PutioFolder f in folder.GetFolders()) { FileInformation fi = new FileInformation(); fi.FileName = f.Name; fi.Attributes = FileAttributes.Offline | FileAttributes.NotContentIndexed | FileAttributes.ReadOnly | FileAttributes.Directory; fi.CreationTime = DateTime.Now; fi.LastAccessTime = DateTime.Now; fi.LastWriteTime = DateTime.Now; fi.Length = 0; files.Add(fi); } foreach (PutioFile file in folder.GetFiles()) { FileInformation fi = new FileInformation(); fi.FileName = file.Name; fi.Attributes = FileAttributes.Offline | FileAttributes.NotContentIndexed | FileAttributes.ReadOnly; fi.CreationTime = DateTime.Now; fi.LastAccessTime = DateTime.Now; fi.LastWriteTime = DateTime.Now; fi.Length = file.Size; files.Add(fi); } sw.Stop(); logger.Debug("FindFiles took {0} ms. on {1}", sw.ElapsedMilliseconds, filename); return(0); }