Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > пометить файл


Автор: shara 4.3.2010, 23:04
всем драсте

столкнулся с такой вот трудностью:
хочу каким-то образом в Windows'е пометить определенный файл одной программой чтобы потом другая прога могла его "опознать" среди всего множества файлов в ФС, без дополнительного участия пользователя. программа которая ищет "свой" файлы - резедентно висит  в системе.

надумал пока следующие варианты:
  •  опознавать файл по его имени
    например, если путь к файлу "С:\dir\MyFile.txt" то это нужный файл.
    смущает два вопроса, первый 
      ГДЕ хранить список с именами файлов? 
    второй
      КАК быть в случае когда файл принесен с другого компа, например на флешке, а он уже был помечен на том компе.
  •  помечать имя файла 
    например, если обычный файл имел имя "MyFile.txt" то помеченный будет иметь имя "MARK_MyFile.txt"
      главный недостаток что имя файла уж очень легко изменить... крайне ненадежно
     и к тому-же может возникнуть крайне не приятная путаница с английскими буквами которые похожи на русские. английское 'A' и русское 'А' визуально почти не отличимы
  •  дописывать в конец файла свой блок информации
    и по наличию этого блока у файла уже опознавать файл
      очень смущает тот факт что при этом  изменяется размер целевого файла. и плюс ко всему накладные расходы на открытие и чтение конца для ВСЕХ потенциально  "своих" файлов - сильно замедлит работу системы.
  •  использовать потоки
    то есть к целевому файлу прикрутить поток с определенным именем. и по наличию у файла потока с именем ":MyStraem" выносить вердикт свой\чужой
     единственный главный недостаток такого метода в том, что потоки поддерживаются не всему ФС. NTFS поддерживает потоки, а вот FAT - нет. и при копировании файла у которого есть потоки на FAT все информация о потоках будет утеряна
Windows же как-то помечает файлы Скрытй, Архивный, Шифрованный, Только_Для_Чтения... можно ли как-то нечто подобное использовать и в своих целях?

Автор: GoldFinch 4.3.2010, 23:57
если файл имеет какую-то константную уникальную часть, можно использовать ее хеш

какбэ все зависит от задачи.

Автор: shara 5.3.2010, 00:07
может быть абсолютно любой файл, который ОСь позволит конечному юзверю прочитать

задача пометить файл в одной программе и затем опознать его в другой

(желательно чтобы метод был максимально переносимым)

Автор: korian 5.3.2010, 00:28
Цитата(shara @  4.3.2010,  22:04 Найти цитируемый пост)
Windows же как-то помечает файлы Скрытй, Архивный, Шифрованный, Только_Для_Чтения... можно ли как-то нечто подобное использовать и в своих целях?

FAT поддерживает эти аттрибуты (кроме шифрованный), поэтому есть возможность их переносить.
любой из способов решения этой задачи будет читом в той или иной степени.
как вариант: устанавливать определенную дату создания, изменения или доступа к файлу.

Автор: shara 5.3.2010, 00:43
Цитата(korian @  4.3.2010,  23:28 Найти цитируемый пост)
юбой из способов решения этой задачи будет читом в той или иной степени

согласен



Цитата(korian @  4.3.2010,  23:28 Найти цитируемый пост)
как вариант: устанавливать определенную дату создания, изменения или доступа к файлу. 

вариант. предпочту оставить сей способ на самый крайний случай..

Автор: Ln78 5.3.2010, 06:30
Цитата(shara @  4.3.2010,  23:04 Найти цитируемый пост)
хочу каким-то образом в Windows'е пометить определенный файл одной программой чтобы потом другая прога могла его "опознать" среди всего множества файлов в ФС, без дополнительного участия пользователя.

Если файловая система NTFS, то можно использовать дополнительные потоки.

Автор: azesmcar 5.3.2010, 08:42
shara

Зачем эти шаманские штучки? Залей пути к файлам в определенный файл или в регистры и читай из другой программы.
По поводу атрибутов, нужно иметь возможность помечать любой файл или какой-то определенный тип?
Можешь почитать тут, вроде похожая проблема
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/88ed3cb9-7c15-4350-8c94-14c1729eb15b

Цитата(shara @  4.3.2010,  23:04 Найти цитируемый пост)
  КАК быть в случае когда файл принесен с другого компа, например на флешке, а он уже был помечен на том компе.

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

Автор: shara 5.3.2010, 19:44
Ln78, 
Цитата(Ln78 @  5.3.2010,  05:30 Найти цитируемый пост)
Если файловая система NTFS, то можно использовать дополнительные потоки. 


Цитата(shara @  4.3.2010,  22:04 Найти цитируемый пост)
 использовать потоки
то есть к целевому файлу прикрутить поток с определенным именем. и по наличию у файла потока с именем ":MyStraem" выносить вердикт свой\чужой
 единственный главный недостаток такого метода в том, что потоки поддерживаются не всему ФС. NTFS поддерживает потоки, а вот FAT - нет. и при копировании файла у которого есть потоки на FAT все информация о потоках будет утеряна


Цитата(azesmcar @  5.3.2010,  07:42 Найти цитируемый пост)
По поводу атрибутов, нужно иметь возможность помечать любой файл или какой-то определенный тип?
 да, любой



Цитата(azesmcar @  5.3.2010,  07:42 Найти цитируемый пост)
Тут как посмотреть, зависит от задачи, в принципе этот файл хоть и был помечен, но был помечен не тобой и не на твоем компьютере, да и копия файла это уже другой файл. Тебе виднее как надо.
 интересует тот факт что файл ВООБЩЕ был помечен

а ссылка описывает похожую проблему. тольк если я правильно понял там еще народ хочет свою вкладку в контекстном меню СвойстваФайла сделать.. надо будет взглянуть на метод более детально. спасибо 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)