Главная страница
    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.05 c
2-1201508491
HITMAN
2008-01-28 11:21
2008.02.17
Работа с таблицей (баз данных)


2-1201003051
deras
2008-01-22 14:57
2008.02.17
Первый и последний дни месяца.


2-1201095633
MishaL
2008-01-23 16:40
2008.02.17
DBGridEh1.Options ошибка


2-1201457736
mahab
2008-01-27 21:15
2008.02.17
Запись дисков


1-1194723583
Max_
2007-11-10 22:39
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский