Главная страница
    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.042 c
15-1200421621
Черный Шаман
2008-01-15 21:27
2008.02.17
Вопрос к Мастерам: как рефакторить такой код.


2-1201169873
Я
2008-01-24 13:17
2008.02.17
Как проверить выводится ли на экран окно Hint


2-1201196422
repus
2008-01-24 20:40
2008.02.17
Тема игр РПГ


2-1201366122
ChaosAD
2008-01-26 19:48
2008.02.17
Query + Lookup


2-1201241651
cr@nk
2008-01-25 09:14
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский