2010-06-07 2 views
4

Я ищу способ определить, был ли файл выполнен или нет. Я немного посмотрел на LastAccessTime в FileInfo, но это не похоже на изменение файла. Я также посмотрел в FileSystemWatcher, но это тоже не похоже на решение. Есть ли такая вещь, как прослушиватель выполнения файлов, или есть другой способ? Если это помогает, я ищу, чтобы написать прослушиватель папок, который переименовывает .avi-файл внутри него после того, как он был просмотрен/выполнен.Есть ли способ определить, был ли файл выполнен или нет в C#?

+2

Учитывая ваш случай .avi, это еще одна программа, читающая файл, считающийся исполняющим его? – jball

ответ

1

Существует различие между «исполняемым» файлом (например, переносимым исполняемым файлом, например «exe»), и «доступом» к файлу (например, AVI-файл, который «воспроизводится» другим exe).

Похоже, что вы ищете нужное место, и вам понадобится «LastAccessTime», но имейте в виду, что разрешение времени доступа зависит от файловой системы ... На NTFS это полная дата/время, на FAT это просто дата (следовательно, она не изменится, если к ней уже обратились в тот день.)

+0

Привет, Damien, Спасибо за ваш ответ. Файловая система NTFS, и я обращаюсь к «LastAcessTime», используя: DateTime example1 = File.GetLastAccessTime (@path); Код компилируется, но я смущен результатами. «LastAccessTime» не изменяется при доступе к avi с помощью медиаплеера. Фактически он по-прежнему показывает то же самое время и дату, что и при создании файла. Есть предположения? – Shane

+0

@Shane: Возможно, вам придется заставить систему перечитать информацию о файле, см. Мой ответ для деталей. – egrunin

+0

@egrunin: Спасибо, я обязательно посмотрю на это, спасибо за вашу помощь. – Shane

0

Хммм, я не слишком уверен в том, что выясню, был ли файл запущен, но лучше всего было бы следить за медиаплеером, чтобы определить, когда видео закончило игру.

+1

Будет ли общий способ отслеживать * все * медиаплееры, или он должен будет обновлять свою программу каждый раз, когда появился новый медиаплеер, способный читать файлы .avi? – FrustratedWithFormsDesigner

1

Фактически, LastAccessTime может быть тем, что вы хотите, так как файлы AVI не выполняются, только открываются. В прошлом я использовал его точно для цели, которую вы описываете, но не программно.

Просто для полноты: Windows не сохраняет историю выполнения, по крайней мере, не публично.

Edited добавить:

Согласно MSDN, LastAccessTime ваш лучший выстрел, однако:

Примечание Этот метод может возвращать неточное значение, так как она использует собственные функции, значения которых не могут постоянно обновляться операционной системой.

Но это следует несколько строк позже:

Чтобы получить последнее значение, вызовите метод Refresh.

(Это относится к FileSystemInfo.Refresh.)

Это все немного тупым, если он не работает точно так, как документировано я не удивлюсь.

+0

Я просто посмотрел на «Дата доступа» с помощью проводника - он не изменяется при открытии файла. После просмотра нескольких файлов он всегда имеет то же значение, что и «Дата создания», и поэтому даже предшествует «Дата изменения» для измененных файлов. –

+0

Кстати, Windows 7 Enterprise 64 бит на NTFS-образованном диске, если это должно получиться. Используемые Notepad и Notepad ++ для открытия текстовых файлов, Windows Photo Viewer для изображений JPEG и 7Zip для некоторых архивов. –

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