Avatar billede js_delphi Nybegynder
11. november 2010 - 12:57 Der er 8 kommentarer og
1 løsning

Vedhaefte informationer til filer?

Hej,

I et program gemmer jeg filer af forskellige formater lokalt paa harddisken (alle filerne i een mappe), for derefter at kopiere filerne ud paa et netvaerksdrev i en separat traad, naar der er tid til det.

Den endelige destination for filerne kan vaere forskellig fra fil til fil, saa derfor har jeg brug for at vedhaefte stien til filerne, saa min traad senere hen ved, hvor filerne skal flyttes hen.

Hvordan kan man dette goere smartest? Har brug for et par lyse forslag...

Paa forhaand tak!
Avatar billede Slettet bruger
11. november 2010 - 18:45 #1
Og hvad indeholder disse filer?
Avatar billede hrc Mester
12. november 2010 - 09:59 #2
Du kan jo tilknytte en header til filen som indeholder alle de oplysninger du kan tænke dig.

Altså noget med i retning af dette:

var
  ifs, ofs: TFileStream;
  writer: TWriter;
begin
  ifs := TFileStream.Create('input.txt',fmOpenRead);
  ofs := TFileStream.Create('input.inh',fmCreate); // inh = inhouse
  try
    writer := TWriter.Create(ofs,1024);
    writer.WriteString('f:\gunnar\afpresning\julefrokost\input.txt');
    writer.WriteString('noget andet tekst du synes kunne være interessant');
    writer.FlushBuffer;
    ofs.CopyStream(ifs,ifs.size);
  finally
    writer.free;
    ofs.free;
    ifs.free;
  end;
end;

Når tråden tog fat i filen (de hedder alle noget med .inh) så var proceduren:

var
  ifs, ofs: TFileStream;
  reader: TReader;
begin
  ifs := TFileStream.Create('input.inh',fmOpenRead);
  reader := TReader.Create(ifs,1024);
  try
    ofs := TFileStream.Create(Reader.ReadString);
    try
      Reader.SkipValue; // Ikke interessant alligevel
      Reader.FlushBuffer;
      ofs.CopyStream(ifs,0);
    finally
      ofs.Free;
    end;
  finally
    Reader.Free;
    ifs.Free;
  end;
end;

Sådan noget i den retning...
Avatar billede js_delphi Nybegynder
14. november 2010 - 09:48 #3
Filerne har forskelligt indhold, og er af forskellige formater.

hrc:
Jeg er endt med at generere en text fil med endelsen .h for hver genereret fil. Denne header fil er ikke tilknyttet den fil, den indeholder informationer om paa anden maade, end at den har samme navn, bortset fra endelsen.

Jeg kunne ikke rigtig gennemskue dit forslag. Ender det hele ikke bare i een fil pga. linien:
ofs.CopyStream(ifs,ifs.size);
??

Jeg synes egentlig ikke saa godt om min loesning, da det virker lidt overdrevet med en ekstra fil, som kun indeholder en sti.

Andre overvejelser fra min side har vaeret:
1: Extended file attributes
Fandt aldrig fornuftige informationer om dette paa nettet.

2: Oprette en temporaer mappe for hver sti, da der ofte er flere filer, som skal ende samme sted.
Problemet er bare, at et mappenavn ikke kan indeholde specialtegn (f.eks. \).

3:
Inkludere stien som text i selve filerne.
Problemet her er, at formaterne er forskellige (.xml, .xls, .txt), og at hver fil skal aabnes for at finde stien. Det skal en header fil godt nok ogsaa, men den er selvsagt ekstremt lille.
Avatar billede hrc Mester
15. november 2010 - 10:13 #4
js_delphi: Det skulle ikke ende med en kopi af filen for positionen i streamen står efter den header der blev lagt ind.

Extended attributes er også en løsning. I praksis er det det samme som jeg har forslået, blot med pointerjonglering og mærkelige Win32-funktionskald. Har lavet lidt og var også i gang med en klasse til indkapsling af funktionaliteten ... men det projekt døde omtrent samtidig med jeg begyndte at avle børn!

2. Ikke kønt.

3. Heller ikke kønt.

Jeg ville (naturligvis) selv vælge at proppe lidt informationer ind i filen - på den måde jeg foreslog.

I øvrigt stikker .h extensionen nok lidt i øjnene på C-folk (og afarter deraf).
Avatar billede mbsnet Nybegynder
20. november 2010 - 07:26 #5
Man kunne også lave sit eget filformat, hvor de ønskede oplysninger er skrevet først, efterfulgt af selve fil-indholdet.

Derefter designe to rutiner til at læse og skrive filen.
Kan godt komme med et eksempel hvis det ønskes, men den metode kan kun bruges hvis original filen må blive ændret i det hele taget.

//mortenbs
Avatar billede hrc Mester
21. november 2010 - 09:15 #6
mbsnet: æhh. det er jo også det jeg har foreslået :-)
Avatar billede mbsnet Nybegynder
21. november 2010 - 14:55 #7
nå ja det er det da egentlig også :-) hehe sorry
Avatar billede js_delphi Nybegynder
28. marts 2011 - 10:42 #8
hrc, skal vi dele point?
Avatar billede js_delphi Nybegynder
28. maj 2011 - 22:46 #9
Alright, saa snupper jeg dem selv :)
Tak for hjaelpen ellers.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester