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

Вниз

FileStream не сохраняет обновленный файл   Найти похожие ветки 

 
msoftware ©   (2003-03-27 03:35) [0]

Здравствуйте Мастера! У меня такая проблема - файл не хочет сохранятся. Причем я с этим сталкиваюсь уже не впервый раз, может вы мне поможете? Вот листинг Unit"a с помощью которого и происходят все файловые операции:
unit uClass;

interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,Dialogs,JPEG;
type TImgCollection=Class(TObject)
private
GetCount: Integer;
ImageSize: TStringList;
Image: Array of TMemoryStream;
public
ImgCaption: TStringList;
Function GetBitmap(ImageIndex: Integer): TJPEGImage;
Function SaveImages: boolean;
procedure DeleteBitmap(ImageIndex: Integer);
Procedure ReadImages;
Function AddBitmap(FileName: String): boolean;
Property ImagesCount: Integer Read GetCount;
Constructor Create;
end;

implementation
Uses Unit1;
{ TImgCollection }

constructor TImgCollection.Create;
begin
GetCount:=0;
ImageSize:= TStringList.Create;
ImgCaption:= TStringList.Create;
end;

procedure TImgCollection.DeleteBitmap(ImageIndex: Integer);
var i: Integer;
begin
ImageSize.Delete(ImageIndex);
ImgCaption.Delete(ImageIndex);
For i:=ImageIndex to GetCount-2 do
Image[i]:=Image[i+1];
GetCount:=GetCount-1;
If Not SaveImages then showMessage("Save Error!");
end;

function TImgCollection.GetBitmap(ImageIndex: Integer): TJPEGImage;
var MStream: TMemoryStream;
begin
MStream:=TMemoryStream.Create;
MStream.LoadFromStream(img.Image[ImageIndex]);
Result:= TJPEGImage.Create;
Result.LoadFromStream(MStream);
end;

procedure TImgCollection.ReadImages;
var F: TFileStream;
T: TextFile; i: integer;
s: int64;
d: Char;
begin
if FileExists("sprtfile.MXF") then begin

AssignFile(T,"sprtfile.MXF");
Reset(T);
ReadLn(T,GetCount);
For i:=0 to ImagesCount-1 do begin
ReadLn(T,s);
ImageSize.Add(IntToStr(S));
end;
CloseFile(T);
F:=TFileStream.Create("sprtfile.MXF",fmOpenRead);
d:=chr(5);
while d<>chr(6) do f.Read(d,1);
For i:=0 to ImagesCount-1 do begin
SetLength(Image,i+1);
Image[i]:=TMemoryStream.Create;
Image[i].CopyFrom(F,StrToInt(ImageSize.Strings[i]));
end;
for i:=0 to ImagesCount-1 do
fMain.cImageName.Items.Add("Image #"+inttostr(i+1)) ;

end;
end;

function TImgCollection.SaveImages: boolean;
var F: TfileStream;
T: TextFile;
i: integer;
s: int64;
begin
try
AssignFile(T,"sprtfile.MXF");
Rewrite(T);
WriteLn(T,ImagesCount);
For i:=0 to ImagesCount-1 do begin
S:=StrToInt(ImageSize.Strings[i]);
WriteLn(T,s);
end;
write(t,chr(6));
CloseFile(T);
F:=TFileStream.Create("sprtfile.MXF",fmOpenWrite);
f.Seek(0,soEnd);
For i:=0 to ImagesCount-1 do begin
Image[i].Position:=0;
f.CopyFrom(Image[i],StrToInt(imageSize.Strings[i]));
end;
//f.Free;
Result:=True;
except
Result:=False;
end;
end;

function TImgCollection.AddBitmap(FileName: String): boolean;
var MImage: TMemoryStream;
begin
MImage:=TMemoryStream.Create;
MImage.LoadFromFile(FileName);
try

ImgCaption.Add("Рисунок #"+IntToStr(ImagesCount));
ImageSize.Add(IntToStr(MImage.Size));
GetCount:=GetCount+1;
SetLength(Image,ImagesCount);
Image[ImagesCount-1]:=TMemoryStream.Create;
Image[ImagesCount-1]:=MImage;
Result:=True;

except
Result:=False;
end;

end;

end.


 
msoftware ©   (2003-03-27 09:18) [1]

Подскажите почему????????


 
Anatoly Podgoretsky ©   (2003-03-27 09:39) [2]

Ты весь текст программы привел?


 
msoftware ©   (2003-03-27 10:02) [3]

>Anatoly Podgoretsky ©
Нет вы не угадали, он в десятки раз больше. И вообще это не программа а только Класс! Но раз вы такие умные подскажите почему не сохраняет, просто я немогу найти ошибку самостоятельно. И вообще как вы там некоторым пишете:
>Удалено модератором
>Примечание: Создание пустых сообщений
Дак чтож вы свое та не удаляете или вы в нем находите сообщение нужное кому-то???
Да-аа-а-а... Позор!!!


 
REA ©   (2003-03-27 10:06) [4]

Где ошибка выдели и что происходит уточни. Комментарий AP по существу.


 
Smithson ©   (2003-03-27 10:18) [5]

Видел я похожие грабли. В чем причина - не скажу, но смешивать потоковый и обычный доступ к файлу не надо. Или TFileStream, или AssignFile/Reset/Rewrite


 
msoftware ©   (2003-03-27 10:20) [6]

Вобщем вызывая класс я делаю вот так:
...
if dlg.Execute then
img.AddBitmap(dlg.FileName);
img.SaveImages;
...
Из вышесказанного вытекает нижеследуещее:
Вызывается AddBitmap, который обрабатывает файл и добавляет его в коллекцию TMemoryStream.
Затем этот весь массив потоков с размерами каждого рисунка сохраняется в файл.
Просто не хочет он записывать это, ошибку не выдает но и не записывает


 
REA ©   (2003-03-27 10:26) [7]

>смешивать потоковый и обычный доступ к файлу не надо. Или TFileStream, или AssignFile/Reset/Rewrite

тот и другой по-видимому используют WriteFile, что по идее не запрещено...

2msoftware: ну локализуй ошибку то - разбей на работающие части и неработающие, дай на вход каждой функции тестовые данные и посмотри что на выходе, отладочных сообщений побольше...

Вот это например что за фигня?
Image[ImagesCount-1]:=TMemoryStream.Create;
Image[ImagesCount-1]:=MImage;


 
msoftware ©   (2003-03-28 15:23) [8]

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Я знаю в чем дело. Оказывается файл не сохранялся из-за этого: F:=TFileStream.Create("sprtfile.MXF",fmOpenWrite);
А я сделал вот так:
F:=TFileStream.Create("C:\sprtfile.MXF",fmOpenWrite);
И все пошло!
Почему?...

Зато столько маялся...


 
Zelius ©   (2003-03-28 15:43) [9]

а ты поищи "sprtfile.MXF" у себя на диске, может найдешь его где-нить, где не ожидал увидеть! :)


 
Anatoly Podgoretsky ©   (2003-03-28 16:28) [10]

Сколько раз говорили миру - абсолютные пути иначе получитсч емеля-растеряшка или фейсом об табле



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-19599
Vavan
2003-03-28 16:56
2003.04.07
dbGrid


1-19589
Кот Джин
2003-03-28 15:18
2003.04.07
Пара вопросиков по RichEdit


1-19613
moorcat
2003-03-25 11:33
2003.04.07
StringGrid


1-19649
Мыш
2003-03-25 10:44
2003.04.07
рисование


14-19758
FVlad
2003-03-16 21:33
2003.04.07
Электронные книги