Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FileName, в файле 
:(
    Опции темы
z-END
  Дата 20.6.2004, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Собственно имеется запись, одно из ее полей String[255] в которой хранится имя файла...
Отсюда возникает разумный вопрос, какова вероятность того что имя файла превысит 255 символов?
ЗЫ у себя на компе ненашел ниодного файла длиннее 255 символов. у кого нибудь есть? smile.gif



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Serggggg
Дата 20.6.2004, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



Само имя файла, ИМХО, вряд ли превысит 255 символов - это надо постараться задать FileName в размере более 1,5 SMS-сообщения. А вот если указывается полный путь к файлу, да еще и неплохая вложенность папок (уровней так 5-6) - может и не поместиться. Хороший пример - резалка CD - Nero BurningRom - он ругается, когда полный путь к файлу превышает 255 символов.
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
z-END
Дата 20.6.2004, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



хм, ну я вообще-то об этом и говорил полное имя файла..
Если отметать сеть, просто на StandAlone-компе часто ли бывают такие случаи?!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Петрович
Дата 20.6.2004, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Если отметать сеть, просто на StandAlone-компе часто ли бывают такие случаи?!

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



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Cheba
Дата 20.6.2004, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



А еще можно превысить если использовать монтирование дисков в папки под NTFS. Особенно если к самой папке путь в символов 100.
PM MAIL ICQ   Вверх
<Spawn>
Дата 20.6.2004, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



nJIaKca.spb Так что используй просто string - записывать такую строку не намного сложнееsmile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Serggggg
Дата 20.6.2004, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



nJIaKca.spb, а увеличить размер поля записи можно? Или String[255]
- это принципиально?
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
<Spawn>
Дата 20.6.2004, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Serggggg string[255] - это, насколько я знаю, старые Паскалевские строки, предельный размер которых равен 255, т.к. записывается в хедере строки, т.е. в одном байте. А если использовать string, то будет использоваться указатель на строку -> запись чуть услознится, но зато размер до 2ГБ можешь писатьsmile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
-=::BlackCat::=-
Дата 20.6.2004, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 12.7.2003
Где: растёт анаша?

Репутация: 1
Всего: 6



таких случеев много, по крайне мере у меня навалом


--------------------
-=::BlackCat::=-user posted image

такой дуратцкий аватар потому как мой 100х100, а такие подгрузить нелзя, движок форума чо сам не может его переделать??  гррр, админ, форум косячит  
PM MAIL ICQ   Вверх
Alex
Дата 20.6.2004, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



А можно просто хранить короткий путь к файлу.

Код
function sfn(const LongName: String): String;
// Возвращает LongFileName преобразованное в соответствующее короткое имя
var i :Integer;
begin
 SetLength(Result,Length(LongName));
 i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
 if  i > Length(Result)  then begin
   SetLength(Result,i);
   i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
 end;
 SetLength(Result,i);
end;
// -----------------------------------------------------------------
function lfn(const ShortName: String): String;
// Возвращает ShortFileName преобразованное в соответствующее длинное имя
var
 GetLongPathName: function(lpszShortPath: PChar; lpszLongPath: PChar;
                           cchBuffer: DWORD): DWORD; stdcall;
 h: THandle;
 i: Integer;
begin
 Result:= ShortName;
 if Result = '' then Exit;
 h := GetModuleHandle(kernel32);
 if h = 0 then Exit;
 @GetLongPathName := GetProcAddress(h, 'GetLongPathNameA');
 if not Assigned(GetLongPathName) then Exit;
 SetLength(Result, MAX_PATH);
 i:= GetLongPathName(PChar(ShortName), PChar(Result), Length(Result));
 if i = 0 then Exit;
 SetLength(Result, i);
end;


Это сообщение отредактировал(а) alex-co - 20.6.2004, 12:06


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
z-END
Дата 20.6.2004, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Ну я так и поступил, создал две переменные:
Код
Path: string[255];
LogPath: string[255];
function GetPath:String;
function Setpath(const APath:String);
если длинна больше 255 то первые 255 заносятся в переменную Path, а остаток в LongPath, функция FullPath собирает ето чудо, а SetPath соответственно записывает..
ЗЫ надеюсь больше 510 символов таких путей уже в природе нетsmile.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
youri
Дата 21.6.2004, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



А почему ты не хочешь использовать string вместо string[255]?
PM   Вверх
Medved
Дата 21.6.2004, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Действительно, а чем тебе не нравяться динамические строки AnsiString? К тому же они совместимы с функциями API Win32. Если я не ошибаюсь, их длина может составлять до 2 Гб. А если ты задаешь длину строку не превышающую 255 символов, (т.е. String[255]) то дельфи воспринимает эту строку как ShortString.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex
Дата 21.6.2004, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



На сколько я понимаю, человек пишет данные в типизированный файл и по этому просто не может использовать String


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Петрович
Дата 21.6.2004, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



А еще, можно создать array [1..2048] of char hehe.gif , или массу других извращений hehe.gif hehe.gif hehe.gif



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Medved
Дата 21.6.2004, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Во, во, Петрович как всегда выкрутился smile.gif сразу видно, настоящий русский программист (под словом русский имеется ввиду CCCP). Только не используй динамические массивы, если хочешь записывать в типизированный файл.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Girder
Дата 21.6.2004, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата
... пишет данные в типизированный файл

Типизированный файл - это хорошо(для новичка) и плохо(для реализации) - Но это моё мнение.
В свое время столько по имел с "Типизированными файлами" проблем.
Поэтому лудше используй String и свои обработчики записи и считывания, не забудь записывать в файл версию файла(т.е. формата данных в файле).



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Alex
Дата 22.6.2004, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Pegas @ 21.6.2004, 09:48)
Во, во, Петрович как всегда выкрутился smile.gif сразу видно, настоящий русский программист (под словом русский имеется ввиду CCCP). Только не используй динамические массивы, если хочешь записывать в типизированный файл.

я бы сказал, как всегда попал в точку smile.gif smile.gif smile.gif


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Петрович
Дата 22.6.2004, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Во, во, Петрович как всегда выкрутился

Наверное не донес smile.gif. Я то имел ввиду, что так можно, но это извращение.
Правильнее конечно будет наладить нормальную запись AnsiString. И вообще, лучше иметь не запись, а объект который умеет сам себя писать и читать. Причем, как правильно отметил Girder, в начало файла надо писать версию его структуры, тогда, при дальнейшем развитии программы не будет проблем с чтением "старых" файлов.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
z-END
Дата 22.6.2004, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



thumbs-up.gif спросил только часто ли бывает что длинна (полное имя) файла превышает 255 символов, а тут столько вариантов и советов! спасибоsmile.gif
Петрович про R/W объектов это хорошо когда объект сам по себе... а вот если он является частью части динамического массива, например:
Код
Type myType1 = Object;
        ...
      end;

Type myBigType1 = Object;
        private
          Items: Array of myType1;
         ...
        public
         procedure Add (Data: myType1);    
          ...
    end;
Type Body = Object
        private  
         Items: Array of myBigType1;
         ...
       public
        ...
  end;

то запись/чтение такого объекта "немного" усложнится... может конечно сказывается мой дурной тон программирования, но я очень часто использую такой вид структуры.
Когда объект содержит текстовую информацию, и известно, что его длинна влегкую привысит 255 символов, то тогда приходится использвать нетипизированный файл и ф-цию BlockWrite, но это в свою очередь влечет за собой то что в таком случае приходится все properties объекта записывать и считывать "вручную" (BlockRead - BlockWrite) что неочень удобно, т.к. в случае если мне вдруг понадобилось добавить какое ни будь свойство в объект, то приходится переписывать заново процедуру чтения/записи...
Согласитесь проще использовать Record и записать в такой-же нетипизированный файл, но таким способом:
Код
for i := 0 to MyObject.RecCount-1 do
begin
BlockWrite (someF, MyObject.RecVersion, SizeOf (TrecVersion));
BlockWrite (someF, MyObject.MyRecord[i], SizeOf (TmyRecord));
end

а считывать так:
Код
BlockRead (someF, MyObject.RecCount, SizeOf (Integer));
SetLength (MyObject.MyRecord, MyObject.RecCount);
for i := 0 to MyObject.RecCount-1 do
begin
BlockRead (someF, MyObject.RecVersion, SizeOf (TrecVersion));
case MyObject.RecVersion of
ver1101:
        begin
           BlockRead (someF, MyAlfa, SizeOf (TmyAlfa));
           Convert (MyAlfa, MyObject.MyRecord[i]);
        end;
ver1102:
        begin
           BlockRead (someF, MyBeta, SizeOf (TmyBeta));
           Convert (MyBeta, MyObject.MyRecord[i]);
        end;
ver1103:  BlockRead (someF, MyObject.MyRecord[i], SizeOf (TmyRecord));
end

и в этом случае уже не надо следить за тем какие данные используются (в ф-ции чтения/записи) а какие еще нет..



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Петрович
Дата 22.6.2004, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



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


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Medved
Дата 23.6.2004, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата
И вообще, лучше иметь не запись, а объект который умеет сам себя писать и читать.

Может быть я не понял ответа, но хотел бы заметить, что объекты нельзя записывать в типизированный файл. Если конечно речь шла об этом.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 23.6.2004, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата
ЗЫ у себя на компе ненашел ниодного файла длиннее 255 символов. у кого нибудь есть?

Например у меня в "E:\Documents and Settings\Администратор\Мои документы" достаточно развесистая клюква подкаталогов с весьма некороткими русификованными названиями, документы тоже именуются не "DOC1.RTF" - так что там полные имена по 300-500 байт сплошь и рядом...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Петрович
Дата 23.6.2004, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Если конечно речь шла об этом.

Тут взглянул наверх, и обнаружил что тема-то вообще не касалась записи файлов biggrin.gif
А что касается:
Цитата
Может быть я не понял ответа, но хотел бы заметить, что объекты нельзя записывать в типизированный файл.
то nJIaKca.spb в своем примере пользует BlockWrite что практически не отличается от использования tFileStream.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.