Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Файл   Найти похожие ветки 

 
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("&#212;&#224;&#233;&#235; &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;!", "&#206;&#248;&#232;&#225;&#234;&#224;", 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
8-1173673946
arturich
2007-03-12 07:32
2008.02.17
Возможно ли?


2-1201243079
F@T@L_Err0r
2008-01-25 09:37
2008.02.17
Edit


2-1201105865
SamProf
2008-01-23 19:31
2008.02.17
Как правильно сделать работу с TAdvNavBar


15-1200226303
SerJaNT
2008-01-13 15:11
2008.02.17
Перетаскивание блоков


1-1194842175
San1712
2007-11-12 07:36
2008.02.17
Как ввести символ в Edit прграммно через Perform?