Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизФайл Найти похожие ветки
← →
Res (2008-01-24 13:29) [0]Здравствуйте! Пытаюсь открыть файл (размер файла больше 150 мб, кодировка Unicode), но выскавивает ошибка: "Cannot open file "". The file name or extrension too long". Задача: открыть файл, изменить данный и сохранить. Подскажите как это можно сделать.
Мой код:function LoadUnicodeFile(const filename: string):string;
procedure SwapWideChars(p: PWideChar);
begin
while p^ <> #0000 do
begin
p^ := WideChar(Swap(Word(p^)));
Inc(p);
end;
end;
var
ms: TMemoryStream;
wc: WideChar;
pWc: PWideChar;
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile(filename);
ms.Seek(0, soFromend);
wc := #0000;
ms.Write(wc, sizeof(wc));
pWC := ms.Memory;
if pWc^ = #$FEFF then {normal byte order mark}
Inc(pWc)
else if pWc^ = #$FFFE then
begin {byte order is big-endian}
SwapWideChars(pWc);
Inc(pWc);
end
else
; {no byte order mark}
LoadUnicodeFile := WideChartoString(pWc);
finally
ms.free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ai: Tstrings;
begin
ai:=Tstringlist.Create;
if(fileexists(form1.Edit1.Text)) then
begin
ai.LoadFromFile(LoadUnicodeFile(form1.Edit1.Text));
ai.SaveToFile("c:\ai.rar");
end
else
begin
application.MessageBox("Ôàéë íå íàéäåí!", "Îøèáêà", mb_ok);
end;
end;
← →
clickmaker © (2008-01-24 13:32) [1]
> ai.LoadFromFile(LoadUnicodeFile(form1.Edit1.Text));
LoadFromFile, а ты подсовываешь содержимое файла
← →
Res (2008-01-24 13:36) [2]Да, функция LoadUnicodeFile файл возращает файл, в типе string;
так вот этот string мне надо открыть, изменить, и сохранить
← →
{RASkov} © (2008-01-24 13:37) [3]> [2] Res (24.01.08 13:36)
А теперь почитай что делает метод LoadFromFile
← →
Palladin © (2008-01-24 13:38) [4]такое только в бреду написать можно
← →
Res (2008-01-24 13:40) [5]Спасибо, понял, надо использовать
ai.text вместо ai.loadfromfile
← →
clickmaker © (2008-01-24 13:41) [6]
> ai.SaveToFile("c:\ai.rar");
легким движением руки уникодный файл превращается в архив РАР )
← →
Washington © (2008-01-24 13:44) [7]
> легким движением руки уникодный файл превращается в архив
> РАР )
Извините за технические неполадки )
← →
Res (2008-01-24 13:46) [8]Да эт я так написал ))) чтобы ai не заменился :)))
← →
Res (2008-01-24 15:34) [9]Пожалуйста подскажите функцию обратную UnicodeFile, т.е. из Ansi перевести в Юникод и сохранить в файл
← →
clickmaker © (2008-01-24 15:52) [10]StringToWideChar - VCL
MultiByteToWideChar - API
← →
ANB © (2008-01-24 15:59) [11]
> Задача: открыть файл, изменить данный и сохранить. Подскажите
> как это можно сделать.
А вот преобразование АНСИ - ЮниКод и обратно в ТЗ отсутствует.
И лучше от него избавится, т.к. даже если исходный файл не меняли, результат может отличаться от исходного.
← →
Res (2008-01-24 16:06) [12]
> StringToWideChar - VCL
> MultiByteToWideChar - API
GetMem(OleStr, (Length(ai.Text)+1) - SizeOf(WideChar));
try
ai.Text:=StringToWideChar(ai.Text,OleStr, Length(ai.Text)+1);
finally
FreeMem(OleStr);
Ошибка вылетает,типа нехватка памяти
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c