2013-10-04 4 views
1

Можно ли обнаружить, был ли закрыт файл (например, файл pdf, открытый в превью)?Как определить, был ли файл закрыт?

FSEvents API не запускает такое событие.

Возможно, я мог наблюдать связанный процесс или что-то в этом роде ?!

+0

Файл или документ? Если последнее, зачем вам нужно знать, что документ был закрыт? Там может быть лучший способ сделать то, что вы действительно хотите. –

ответ

1

Да, вы можете узнать, был ли файл закрыт или нет. Итак, ниже я попытался с помощью команды unix lsof -t yourFilePath определить ее и, следовательно, реализовать ее в какао. Ниже приведено ниже lsof -t yourFilePath предоставит вам идентификатор процесса только открытых файлов. Чтобы вы могли легко определить, какие файлы закрыты: -

NSTask *task; 
task = [[NSTask alloc] init]; 
[task setLaunchPath: @"/bin/bash"]; 
NSString *[email protected]"/Users/Home/Desktop/test.doc"; 
[task setArguments:[NSArray arrayWithObjects: @"-c",[NSString stringWithFormat:@"%@ %@ %@",@"lsof",@"-t",yourFilePath],nil]]; 
NSPipe *pipe; 
pipe = [NSPipe pipe]; 
[task setStandardOutput: pipe]; 

NSFileHandle *file; 
file = [pipe fileHandleForReading]; 

[task launch]; 

NSData *data; 
data = [file readDataToEndOfFile]; 
NSString *response = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
if ([response length] > 0) 
{ 
NSLog(@"test.doc file has been opened and process id is %@",response); 
} 
else 
{ 
NSLog(@"test.doc file has been closed"); 
} 
+0

Это поможет вам определить открытый файл, а также –

+0

Зачем вам запускать bash для этого ?! Сшивание вместе «скрипта», состоящего из трех строк, соединенных пробелами, - «запрос * для», не работает с путями, содержащими пробелы или другие «специальные символы». Здесь нет необходимости в сценарии оболочки - вы можете определить lsof напрямую по своему собственному пути и передать два аргумента непосредственно в массиве. –

+0

@Peter Hosey, я согласен с вашей точкой в ​​том, почему я упомянул путь без каких-либо специальных символов. Но я хотел сказать, что какао предоставляет какой-либо api, чтобы определить, открыт или закрыт какой-либо файл? –

Смежные вопросы