| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > FileName |
| Автор: z-END 20.6.2004, 09:31 |
| Собственно имеется запись, одно из ее полей String[255] в которой хранится имя файла... Отсюда возникает разумный вопрос, какова вероятность того что имя файла превысит 255 символов? ЗЫ у себя на компе ненашел ниодного файла длиннее 255 символов. у кого нибудь есть? |
| Автор: Serggggg 20.6.2004, 10:12 |
| Само имя файла, ИМХО, вряд ли превысит 255 символов - это надо постараться задать FileName в размере более 1,5 SMS-сообщения. А вот если указывается полный путь к файлу, да еще и неплохая вложенность папок (уровней так 5-6) - может и не поместиться. Хороший пример - резалка CD - Nero BurningRom - он ругается, когда полный путь к файлу превышает 255 символов. |
| Автор: z-END 20.6.2004, 10:36 |
| хм, ну я вообще-то об этом и говорил полное имя файла.. Если отметать сеть, просто на StandAlone-компе часто ли бывают такие случаи?! |
| Автор: Петрович 20.6.2004, 11:05 | ||
Да, особенно, если HDD большой и информация на нем хорошо структуированна (много вложенных папок, имена несут смысловую нагрузку поэтому длинные). |
| Автор: Cheba 20.6.2004, 11:17 |
| А еще можно превысить если использовать монтирование дисков в папки под NTFS. Особенно если к самой папке путь в символов 100. |
| Автор: <Spawn> 20.6.2004, 11:21 |
| nJIaKca.spb Так что используй просто string - записывать такую строку не намного сложнее |
| Автор: Serggggg 20.6.2004, 11:22 |
| nJIaKca.spb, а увеличить размер поля записи можно? Или String[255] - это принципиально? |
| Автор: <Spawn> 20.6.2004, 11:29 |
| Serggggg string[255] - это, насколько я знаю, старые Паскалевские строки, предельный размер которых равен 255, т.к. записывается в хедере строки, т.е. в одном байте. А если использовать string, то будет использоваться указатель на строку -> запись чуть услознится, но зато размер до 2ГБ можешь писать |
| Автор: -=::BlackCat::=- 20.6.2004, 11:43 |
| таких случеев много, по крайне мере у меня навалом |
| Автор: Alex 20.6.2004, 12:04 | ||
А можно просто хранить короткий путь к файлу.
|
| Автор: z-END 20.6.2004, 15:04 | ||
Ну я так и поступил, создал две переменные:
ЗЫ надеюсь больше 510 символов таких путей уже в природе нет |
| Автор: youri 21.6.2004, 04:34 |
| А почему ты не хочешь использовать string вместо string[255]? |
| Автор: Medved 21.6.2004, 07:36 |
| Действительно, а чем тебе не нравяться динамические строки AnsiString? К тому же они совместимы с функциями API Win32. Если я не ошибаюсь, их длина может составлять до 2 Гб. А если ты задаешь длину строку не превышающую 255 символов, (т.е. String[255]) то дельфи воспринимает эту строку как ShortString. |
| Автор: Alex 21.6.2004, 07:50 |
| На сколько я понимаю, человек пишет данные в типизированный файл и по этому просто не может использовать String |
| Автор: Петрович 21.6.2004, 08:15 |
| А еще, можно создать array [1..2048] of char |
| Автор: Medved 21.6.2004, 08:48 |
| Во, во, Петрович как всегда выкрутился |
| Автор: Girder 21.6.2004, 09:07 | ||
Типизированный файл - это хорошо(для новичка) и плохо(для реализации) - Но это моё мнение. В свое время столько по имел с "Типизированными файлами" проблем. Поэтому лудше используй String и свои обработчики записи и считывания, не забудь записывать в файл версию файла(т.е. формата данных в файле). |
| Автор: Alex 22.6.2004, 00:00 | ||
я бы сказал, как всегда попал в точку |
| Автор: Петрович 22.6.2004, 07:56 | ||
Наверное не донес Правильнее конечно будет наладить нормальную запись AnsiString. И вообще, лучше иметь не запись, а объект который умеет сам себя писать и читать. Причем, как правильно отметил Girder, в начало файла надо писать версию его структуры, тогда, при дальнейшем развитии программы не будет проблем с чтением "старых" файлов. |
| Автор: z-END 22.6.2004, 10:42 | ||||||
| Петрович про R/W объектов это хорошо когда объект сам по себе... а вот если он является частью части динамического массива, например:
то запись/чтение такого объекта "немного" усложнится... может конечно сказывается мой дурной тон программирования, но я очень часто использую такой вид структуры. Когда объект содержит текстовую информацию, и известно, что его длинна влегкую привысит 255 символов, то тогда приходится использвать нетипизированный файл и ф-цию BlockWrite, но это в свою очередь влечет за собой то что в таком случае приходится все properties объекта записывать и считывать "вручную" (BlockRead - BlockWrite) что неочень удобно, т.к. в случае если мне вдруг понадобилось добавить какое ни будь свойство в объект, то приходится переписывать заново процедуру чтения/записи... Согласитесь проще использовать Record и записать в такой-же нетипизированный файл, но таким способом:
а считывать так:
и в этом случае уже не надо следить за тем какие данные используются (в ф-ции чтения/записи) а какие еще нет.. |
| Автор: Петрович 22.6.2004, 15:18 |
| Дабы не развивать здесь дисскусию о том кто как пишет, я соглашусь что приведенный выше способ тоже имеет право на жизнь. Хотя я предпочитаю объекты хранить не в массивах, а в коллекциях, ... ... ... |
| Автор: Medved 23.6.2004, 14:18 | ||
Может быть я не понял ответа, но хотел бы заметить, что объекты нельзя записывать в типизированный файл. Если конечно речь шла об этом. |
| Автор: Akina 23.6.2004, 14:33 | ||
Например у меня в "E:\Documents and Settings\Администратор\Мои документы" достаточно развесистая клюква подкаталогов с весьма некороткими русификованными названиями, документы тоже именуются не "DOC1.RTF" - так что там полные имена по 300-500 байт сплошь и рядом... |
| Автор: Петрович 23.6.2004, 22:37 | ||||
Тут взглянул наверх, и обнаружил что тема-то вообще не касалась записи файлов А что касается:
|