Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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("&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.222 c
2-1201085924
Rusl92
2008-01-23 13:58
2008.02.17
Печать таблицы из Бд


2-1201286538
AntonUSAnoV
2008-01-25 21:42
2008.02.17
составить SQL выборку по именинникам


2-1201455070
Бэтман
2008-01-27 20:31
2008.02.17
ComboBox


15-1200149061
TUser
2008-01-12 17:44
2008.02.17
Turbo Delphi + Win 2003


1-1194786224
9899100
2007-11-11 16:03
2008.02.17
обработка строк текстового файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский