Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.164 c
14-19825
Supreme 2
2003-03-19 16:19
2003.04.07
Оригинальное поведение при знакомстве с девушками


3-19448
Sheva
2003-03-18 16:49
2003.04.07
Справочники.


1-19529
Pavel_
2003-03-26 14:25
2003.04.07
выполенние процедуры по указателю


1-19610
StarCon
2003-03-19 12:21
2003.04.07
Передача данных в DLL


1-19693
Шурик Ш
2003-03-26 11:41
2003.04.07
Как программно добраться до свойства Excel я?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский