Текущий архив: 2004.07.04;
Скачать: CL | DM;
Вниз
Cледующий код дописывает к файлу перевод строки. Как от этого изб Найти похожие ветки
← →
Алекс А (2004-06-13 01:11) [0]авиться ?
ListBox1.Items.LoadFromFile( "test.txt" );
ListBox1.Items.SaveToFile( "test.txt" );
Файл test.txt состоит всего из одного символа "a". После выполнения кода его длина увеличивается до 3 символов. Происходит это возможно из-за того, что каждая строка должна заканчиваться переводом строки. Мне же надо, чтобы ничего лишнего не дописывалось. Если в конце последней строки нет перевода, то чтобы также и оставалось бы. Как этого можно добиться ?
← →
KilkennyCat © (2004-06-13 01:13) [1]Не пользоваться Lines. Либо удалять ненужное вручную.
← →
Anatoly Podgoretsky © (2004-06-13 01:25) [2]Перед загрузкой проверь есть ли в конце символы перевода, после сохранения скорректируй
← →
Алекс А (2004-06-13 03:19) [3]
> Anatoly Podgoretsky © (13.06.04 01:25) [2]
> Перед загрузкой проверь есть ли в конце символы перевода,
> после сохранения скорректируй
Какая функция позволяет узнать длину файла диске, не открывая его? Что то в справке нету. Хочу сравнить длину файла на диске с ListBox1.Items.Text , чтобы при сохранении скорректировать.
← →
Fay © (2004-06-13 04:52) [4]2Алекс А (13.06.04 03:19) [3]
FindFirst
← →
Алекс А (2004-06-14 01:20) [5]
> Fay © (13.06.04 04:52) [4]
> 2Алекс А (13.06.04 03:19) [3]
> FindFirst
А как эту длину уменьшить не загружая файла, а лишь указав файловой системе другую его длину ?
← →
Palladin © (2004-06-14 01:26) [6]В справке нет? А ты искал? Всего то требовалось перевсти да подумать...
FileSize
FileSizeByName
GetFileSize - WAPI
← →
Алекс А (2004-06-14 01:37) [7]
> Palladin © (14.06.04 01:26) [6]
> В справке нет? А ты искал? Всего то требовалось перевсти
> да подумать...
> FileSize
> FileSizeByName
>
> GetFileSize - WAPI
И чего GetFileSize ? Как уменьшить-то размер файла на диске не грузя его ?
← →
default © (2004-06-14 01:41) [8]ёлки, а не быстрей-ли добавить "специальный" SaveToFile
написав потомка TMemo, пишущий строки в файл без #13#10 в конце списка?
← →
default © (2004-06-14 01:42) [9]вернее к ListBox-у, но это ничего не меняет
← →
Алекс А (2004-06-14 01:54) [10]
> default © (14.06.04 01:41) [8]
> ёлки, а не быстрей-ли добавить "специальный" SaveToFile
> написав потомка TMemo, пишущий строки в файл без #13#10
> в конце списка?
Не быстрее. Быстрее изменить одну цифру длины файла.
← →
default © (2004-06-14 02:04) [11]судя по времени появления сабжа этого не сказать
← →
KilkennyCat © (2004-06-14 02:19) [12]Изменение одной цифры длины записи - работа равносильна и по времени и по смыслу > default © (14.06.04 01:41) [8]
← →
default © (2004-06-14 02:29) [13]KilkennyCat © (14.06.04 02:19) [12]
поточнее можно: что вы хотите за запись менять?
для автора сабжа быстрей бы было [8] тем более в исходниках уже готовый код есть, там только чуть изменить и скопировать...
← →
KilkennyCat © (2004-06-14 02:49) [14]
> default © (14.06.04 02:29) [13]
Это я хотел сказать "изменение длины файла при записи" :)
> для автора сабжа быстрей бы было [8] тем более в исходниках
> уже готовый код есть, там только чуть изменить и скопировать...
Да я вроде так и сказал :)
← →
Алекс А (2004-06-14 04:32) [15]Так как же всё таки подправить длину файла на диске ?
← →
Palladin © (2004-06-14 09:49) [16]
> [15] Алекс А (14.06.04 04:32)
Путем потери данных? Trunc
← →
Алекс А (2004-06-15 02:08) [17]
> Palladin © (14.06.04 09:49) [16]
>
> > [15] Алекс А (14.06.04 04:32)
>
> Путем потери данных? Trunc
Ненужных данных. Ну, так чего, никто не знает ?
← →
KilkennyCat © (2004-06-15 02:12) [18]BlockWrite
← →
Алекс А (2004-06-15 03:21) [19]
> KilkennyCat © (15.06.04 02:12) [18]
> BlockWrite
Эта функция записывает данные в файл. Нужна же которая уменьшит его длину на диске.
← →
KilkennyCat © (2004-06-15 03:23) [20]
> Алекс А (15.06.04 03:21) [19]
эта функция не только записывает данные в файл. Она записывает определенный блок данных. Определите его размер меньше на два байта - и все.
← →
Алекс А (2004-06-15 03:27) [21]
> KilkennyCat © (15.06.04 03:23) [20]
>
> > Алекс А (15.06.04 03:21) [19]
>
> эта функция не только записывает данные в файл. Она записывает
> определенный блок данных. Определите его размер меньше на
> два байта - и все.
Геморойно. Считать блок, определить длину, уменьшить, записать блок. Неужели в Дельфи несуществует готовых функций ?
← →
KilkennyCat © (2004-06-15 03:34) [22]
> Алекс А (15.06.04 03:27) [21]
Более того. Все вычисления процессором делаются при помощи нолика и единички.
Что имеется в виду "Готовая функция"? делающая требуемое за пару тактов? с минимумом геморроя? RemBK(filename)? Чушь. Можно тогда требовать готовую функцию для каждой проблемы. Или целиком для программы.
← →
Алекс А (2004-06-15 03:43) [23]
> KilkennyCat © (15.06.04 03:34) [22]
>
> > Алекс А (15.06.04 03:27) [21]
>
>
> Более того. Все вычисления процессором делаются при помощи
> нолика и единички.
> Что имеется в виду "Готовая функция"? делающая требуемое
> за пару тактов? с минимумом геморроя? RemBK(filename)? Чушь.
> Можно тогда требовать готовую функцию для каждой проблемы.
Можно. Ибо файловых функций всего-то десяток от силы. И не иметь стандартной функции для изменения длиный файла - бред.
← →
KilkennyCat © (2004-06-15 03:52) [24]ну есть такая, только не для текстовых,
еще
> Palladin © (14.06.04 09:49) [16]
указал
Truncate
← →
KilkennyCat © (2004-06-15 03:52) [25]и если их всего десяток, то можно было бы и посмотреть....
← →
Алекс А (2004-06-15 04:13) [26]
> KilkennyCat © (15.06.04 03:52) [25]
> и если их всего десяток, то можно было бы и посмотреть....
Ну, так и чего ? Стандартной функции несуществует вообще ? Или я не нашёл просто ?
← →
Fay © (2004-06-15 04:31) [27]var
h : DWORD;
begin
h := CrateFile("c:\бут.ини", GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if h = DWORD(-1) then
RaiseLastOSError;
else
begin
SetFilePointer(
h,
NEW_FILESIZE, // Сам задашь
nil,
FILE_BEGIN);
CloseHandle(h);
end;
end;
← →
Mim1 © (2004-06-15 10:32) [28]
f:tfilestream;
s:string;
begin
ListBox1.Items.LoadFromFile( "test.txt" );
f := tfilestream.create("test.txt" , fmCreate);
try
s := ListBox1.Items.text;
f.write(pointer(s)^,length(s)-2);
finally
freeandnil(f);
end;
end;
← →
Плохиш © (2004-06-15 10:48) [29]>Fay © (15.06.04 04:31) [27]
>Mim1 © (15.06.04 10:32) [28]
Стандартный способ получения кода в действии :-(
Вопрос - наезд - грубый наезд - "делфи дерьмо" --> готовый код и думалку включать не надо.
Одно радует конкурентов у нас больще не становиться ;-)
← →
ПсихЪ (2004-06-15 10:58) [30]Чё вы все тупите. Чел-то, понятно, просто стебётся над вами, а вы и поддаётесь сей мерзкой провакации.
С тем же успехом могли бы развести флэйм на предмет "Неужели в Великой Делпхи нет функции для автоматического написания программ волей мысли? ЧТобы запустил прогу, подумал "ХАЧУ ВОРД ХП", и у тебя на форме тут же выскочили все необходимые компоненты".
To Алекс А:
Если ты действительно такой ленивый, что тебе влом предварительно ознакомится с документацией, посмотреть примеры и стетьи в Интернете, и ты вместо этого идёшь и постишь на форуме какую-то глупость, то нафига ты тогда вообще программируешь?
Завтра ты придёшь и спросишь "А как мне поменять цвет текста в TMemo?". Хорошь тупить, читай доки и смотри примеры, прежде чем постить на форуме.
Закрывай тему, к чёртовой матери!
← →
Алекс А (2004-06-18 01:16) [31]
> Fay © (15.06.04 04:31) [27]
Функция почему то не действует. Длина файла остаётся неизменной. В чём тут может быть дело ? Вроде всё просто, а не работает.
function CutFileLength(aFileName : PAnsiChar; aNewFileSize : Integer): Boolean;
var
h : DWORD;
begin
h := CreateFile(aFileName, GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if h = DWORD(-1) then begin
Result := False;
RaiseLastOSError
end else begin
SetFilePointer(
h,
aNewFileSize, // NEW_FILESIZE, // Сам задашь
nil,
FILE_BEGIN);
CloseHandle(h);
Result := True;
end;
end;
← →
Алекс А (2004-06-18 01:19) [32]
> Palladin © (14.06.04 01:26) [6]
> FileSizeByName
В каком модуле находится FileSizeByName ? Нашё только FileSize .
← →
Andy BitOff © (2004-06-18 01:29) [33]>Алекс А (13.06.04 01:11) Старт!!!
Прошло ПЯТЬ дней !!!!!!!!!!!!!!!!!!!!!!!
>Алекс А (18.06.04 01:16) [31]
Функция почему то не действует.
Да за это время можно было свой ListBox написать с нуля.
Точно у парня геморрой.
← →
Алекс А (2004-06-18 02:57) [34]
> Прошло ПЯТЬ дней !!!!!!!!!!!!!!!!!!!!!!!
Глюк редковозникающий, срочности никакой. Но всё надо доводить до конца !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> Да за это время можно было свой ListBox написать с нуля.
Пиши. Время пошлО.
← →
Alx2 © (2004-06-18 07:27) [35]:)
Вот так писать не надо:
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
len: Integer;
F: System.Text;
begin
S := ListBox1.Items.Text;
Len := Length(S);
while (Len > 0) and (S[Len] in [ #10, #13]) do dec(Len);
SetLength(S, Len);
AssignFile(F, FileName);
Rewrite(F);
Write(F, S);
CloseFile(F);
end;
← →
Алекс А (2004-06-21 02:47) [36]Почему всё таки не работает укарачивание файла ? В чём ошибка ?
function CutFileLength(aFileName : PAnsiChar; aNewFileSize : Integer): Boolean;
var
h : DWORD;
begin
h := CreateFile(aFileName, GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if h = DWORD(-1) then begin
Result := False;
RaiseLastOSError
end else begin
SetFilePointer(
h,
aNewFileSize, // NEW_FILESIZE, // Сам задашь
nil,
FILE_BEGIN);
CloseHandle(h);
Result := True;
end;
end;
← →
Fay (2004-06-21 03:23) [37]Перед CloseHandle надо SetEndOfFile(h)
← →
Алекс А (2004-06-21 03:44) [38]
> Fay (21.06.04 03:23) [37]
> Перед CloseHandle надо SetEndOfFile(h)
Заработало ! Причём что любопытно она может не только уменьшать, но и увеличивать длину файла ! ( Правда за счёт всякого мусора. )
← →
Fay (2004-06-21 03:51) [39]
> Причём что любопытно она может не только уменьшать, но и
> увеличивать длину файла ! ( Правда за счёт всякого мусора.
> )
Спасибо, я в курсе 8).
З.Ы.
SetEndOfFile я просто забыл написать 8).
Страницы: 1 вся ветка
Текущий архив: 2004.07.04;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.046 c