#c#
#c#
Вопрос:
Я создаю интерфейс, основной функцией которого будет выступать в качестве инструмента переименования файлов (основная задача здесь — вручную классифицировать каждый файл в папке в соответствии с правилами, которые описывают их содержимое). На данный момент я внедрил настраиваемый проводник файлов и окно предварительного просмотра для файлов.
Теперь мне нужно найти способ сообщить пользователю, был ли файл уже переименован (это отобразится в ListView проводника файлов). Программа должна быть способна читать, а также изменять это состояние по мере переименования файлов. Я просто не знаю, какой метод является оптимальным для сохранения такого рода информации, поскольку я еще не полностью использовал потенциал C #. Мое первоначальное решение включало текстовые файлы, но опять же, я не знаю, должен ли быть только один текстовый файл для всех файлов и папок или просто текстовый файл для каждой папки, указывающий состояние содержащихся в ней элементов.
Коллега предложил мне использовать электронную таблицу Excel, а затем просто импортировать строку или столбцы, соответствующие моему запросу. Я пытался найти более прямые структуры данных, но опять же, я чувствовал бы себя намного комфортнее, учитывая мнение со стороны.
Итак, как вы думаете, какой способ хранения такого рода данных был бы наилучшим?
PS: Существует много тысяч файлов, все они представляют собой изображения в формате TIFF, расположенные на удаленном сервере, к которому у меня есть полный доступ.
Комментарии:
1. Excel может показаться (и быть) простым, но, по моему опыту, сообщество пользователей будет расти, чтобы позволять себе вольности с форматом Excel, что подорвет ваши попытки точно импортировать его.
2. Подождите… кто предоставляет эту информацию в файле Excel? Пользователи предоставляют эту информацию вам, или вы предоставляете какую-то информацию им?
3. @Chris Файлы excels будут содержать имя каждого отдельного файла с простым 0 или 1 (или каким-либо другим индикатором) рядом с ним, чтобы указать, был ли файл «переименован» (прочитан обработанным) программой. После повторной загрузки файла его состояние в Excel определенно будет установлено равным 1. Дополнительная информация может быть добавлена по мере завершения программы.
Ответ №1:
Я не уверен, о чем вы просите, но если вы просто хотите сохранить некоторую информацию о файле, такую как имя, дата, размер и т.д. вы могли бы использовать класс FileInfo. Она помечена как serializable, чтобы вы могли легко записать их массив в XML-файл, вызвав метод serialize XmlSerializer.
Комментарии:
1. Это больше касается сохранения данных, которые не предоставляются FileInfo. Но, похоже, что XML-файлы — лучшее решение, поэтому я обязательно их проверю. Спасибо!
Ответ №2:
Я не уверен, что понял ваш вопрос. Но, как я понимаю, вы хотите в основном хранить метаданные, относящиеся к каждому файлу. Если это так, я мог бы внести два предложения.
-
Храните метаданные в простом XML-файле. По одному XML-файлу на папку Если у вас несколько папок, XML-файл может быть скрытым файлом. Затем ваше пользовательское приложение может загрузить файл, если он существует, когда вы переходите к папке и представляете данные пользователю.
-
Если вы используете NTFS и знаете, что так будет всегда, вы можете сохранить метаданные для файла в файловом потоке. Это не поток .NET, а дополнительный поток данных, который можно хранить и перемещать с каждым файлом, не влияя на фактическое содержимое файлов. Самое приятное в этом то, что независимо от того, куда вы перемещаете файл, метаданные будут перемещаться вместе с файлом, пока он все еще находится в NTFS
Вот дополнительная информация о файловых потоках http://msdn.microsoft.com/en-us/library/aa364404 (VS.85).aspx
Комментарии:
1. На самом деле я не знаком с NTFS, но если это позволяет избежать наличия XML-файла в каждой папке, то я обязательно посмотрю. Спасибо!
2. 1 Я никогда не слышал об этом раньше. Я знал, что у файлов есть множество свойств, которые сопровождают их, но не знал о файловых потоках.
Ответ №3:
Вы могли бы создать объектно-ориентированную структуру, а затем сериализовать корневой объект в двоичный файл или в файл XML. Таким образом, вы могли бы представить практически любую структуру, поэтому вам не пришлось бы бороться с
Я не знаю, должен ли быть только один текстовый файл для всех файлов и папок или просто текстовый файл для каждой папки, указывающий состояние содержащихся в ней элементов.
проблемы с дизайном. У вас будет только один файл, содержащий все метаданные, которые вам нужно сохранить. Если вы хотите более быстрое открытие / сохранение и меньший размер, используйте двоичный файл, а если вам нужно что-то, что другие люди могли бы открывать и просматривать и, возможно, писать на его основе собственное программное обеспечение, вы можете использовать XML.
Существует множество вариантов того, как это сделать, но для начала вот одна статья из быстрого поиска в Google:http://www.codeproject.com/KB/cs/objserial.aspx
Комментарии:
1. Да, я думал об объектно-ориентированном подходе, но я просто понятия не имел, как на самом деле сохранить данные. Предоставленная вами документация кажется мне очень хорошим началом для изучения концепций сериализации, что в значительной степени является тем, что я искал. Спасибо за помощь!