2024(e)ko apirilaren 21(a), igandea

Direktorioak: Non gaude?







Gure programetan sarritan egiten dugu hau, baina zer balio jarriko dugu sBIDEA kostantean:

   write(Fitxategiaren izena eman (LIBURUAK adibidez): ');
   readln(sFitxIzenLiburutegia);
   sFitxIzenLiburutegia := sBIDEA + sFitxIzenLiburutegia + '.DAT';

Beste modu batez galdeturik: datu-fitxategia non sortzen da?

  • HemenGaude direktorio bat sortu ordenadorearen edozein tokitan (mahaigainean adibidez), bere barnean HemenGorde direktorio bat sortu
  • HanGorde direktorio bat sortu C:\Dev-Pas direktorioan


Datu-fitxategia non sortzen da? galderari erantzuteko programa bat erakusten da beherago. Zenbakiak gordetzen dituen FitxategiakEtaDirektorioak programa deskriba dezagun urratsez urrats:

  • Hasieran uneko direktorioa erakusten da pantailan GetCurrentDirectory funtzioari esker
  • Ondoren, datu-fitxategiaren sIzena izena teklatuaren bitartez emango du erabiltzaileaak 
  • Datu-fitxaregiaren izen osoa eraikitzen da aurretik bidea jarriz eta ostean gehiagarri bat eta luzapena jarriz, bidearen aukerak hauek dira:
    1.   ''
    2.   'HemenGorde\'
    3.   GetCurrentDir + ''\''
    4.   'HanGorde\'
    5.   '\Dev-Pas\HanGorde\'
    6.   'C:\Dev-Pas\HanGorde\'
    7.   'E:\Dev-Pas\HanGorde\'
    8.   'E:\'
  • Datu-fitxategiaren izen osoa finkaturik bere existentzia aztertzen du programak, eta horren arabera bi bide irekitzen dira:
    • Datu-fitxategia ez bada existitzen sortu eta elementuak biltegitzen dira
    • Datu-fitxategia existitzen bada elementu berriak gehitzen dira bukaeran 

Iturburu-programa konpilatu ondoren FitxategiakEtaDirektorioak.exe programa exekutagarria lortuko dugu eta egikaratzeko bi modu daude: Dev-Pas programazio-ingurune barrutik eta Dev-Pas programazio-ingurunetik kanpo.




Dev-Pas programazio-ingurunetik kanpo

Iturburu-programa konpilatuz FitxategiakEtaDirektorioak.exe programa exekutagarria lortu ondoren, Dev-Pas ingurunetik irten HemenGaude direktoriora joateko eta FitxategiakEtaDirektorioak.exe gainean klik egiteko.


Uneko direktorioa HemenGaude delarik, datu-fitxategiarentzat bide desberdinak aukeratu eta emaitza hauek ikertu:


Bidea Datu-fitxategia non sortzen da
1 '' datu-fitxategia HemenGaude direktorioan
2 'HemenGorde\' datu-fitxategia HemenGorde direktorioan
3 GetCurrentDir + '\' datu-fitxategia HemenGaude direktorioan
4 'HanGorde\' exekuzio-denborako errorea
5 '\Dev-Pas\HanGorde\' datu-fitxategia HanGorde direktorioan
6 'C:\Dev-Pas\HanGorde\' datu-fitxategia HanGorde direktorioan
7 'E:\Dev-Pas\HanGorde\' errorea E: unitatean dauden direktorioen arabera
8 'E:\' E: unitatearen erroan (E: unitatean diskorik badago)




Dev-Pas programazio-ingurune barrutik

FitxategiakEtaDirektorioak.pas iturburu-programa konpilatu eta Dev-Pas programazio-ingurunearen menuko Run project aukera hautatu programa exekutatzeko.


Kasu honetan uneko direktorioa C:\Dev-Pas dela jakinik, datu-fitxategiarentzat bide desberdinak aukeratu eta emaitza hauek ikertu:


Bidea Datu-fitxategia non sortzen da
1 '' datu-fitxategia C:\Dev-Pas direktorioan
2 'HemenGorde\' exekuzio-denborako errorea
3 GetCurrentDir + '\' datu-fitxategia C:\Dev-Pas direktorioan
4 'HanGorde\' datu-fitxategia C:\Dev-Pas\HanGorde direktorioan
5 '\Dev-Pas\HanGorde\' datu-fitxategia C:\Dev-Pas\HanGorde direktorioan
6 'C:\Dev-Pas\HanGorde\' datu-fitxategia C:\Dev-Pas\HanGorde direktorioan
7 'E:\Dev-Pas\HanGorde\' errorea E: unitatean dauden direktorioen arabera
8 'E:\' E: unitatearen erroan (E: unitatean diskorik badago)



FitxategiakEtaDirektorioak.pas iturburu-programa:
program FitxategiakEtaDirektorioak;
 
uses
   sysutils;    (* GetCurrentDir eta FileExists funtzioek behar dutelako *)
 
type
   tfFitxategia = file of integer;
   tsKatea = string[199];
 
 
procedure FitxategiaIkusi(sFitxIzen: tsKatea);
var
   f: tfFitxategia;
   iElementua: integer;
begin
   { uztartu }
   assign(f, sFitxIzen);
   reset(f);
 
   writeln('"', sFitxIzen, '" fitxategiak ', filesize(f), ' elementu ditu, bere edukia:');
   while not eof(f) do
   begin
      read(f, iElementua);
      writeln(iElementua:5);
   end;
   writeln('.....................................................................');
   writeln;
   { itxi }
   close(f);
end;
 
 
procedure FitxategiaSortuEtaBete(sFitxIzen: tsKatea);
var
   f: tfFitxategia;
   iElementua, i, kopurua: integer;
begin
   { uztartu }
   assign(f, sFitxIzen);
   rewrite(f);
 
   write('Zenbat elementu nahi dituzu "', sFitxIzen, '" fitxategian? ');
   readln(kopurua);
 
   randomize; { random-aren hazia hasieratu }
   for i:=1 to kopurua do
   begin
      iElementua:=random(10); { 0 eta 9 arteko zenbakia }
      write(f,iElementua);    { fitxategian idatzi eta hurrengo elementura pasa }
   end;
   { itxi }
   close(f);
end;
 
 
procedure FitxategiariElementuakGehitu(sFitxIzen: tsKatea);
var
   f: tfFitxategia;
   iElementua: integer;
   cErantz: char;
begin
   { uztartu }
   assign(f, sFitxIzen);
   reset(f);
   seek(f, filesize(f));
   repeat
      write('"', sFitxIzen, '" fitxategian gordetzeko zenbaki bat eman: ');
      readln(iElementua);
      write(f, iElementua);
      write('Datu gehiagorik gorde nahi duzu? (B/E): ');
      readln(cErantz);
      cErantz := upcase(cErantz);
   until cErantz <> 'B';
   { itxi }
   close(f);
end;
 
 
{============================PROGRAMA NAGUSIA============================}
 
var
   sIzena: tsKatea;
   cAukera: char;
 
begin
   writeln;
   writeln;
   writeln('Uneko direktorioa: ', GetCurrentDir);
   writeln;
    
   writeln('Lanerako fitxategiaren izena eman ezazu (luzapenik gabe)...');
   write('Adibidez, "Datuak" izena: ');
   readln(sIzena);
 
   writeln;
 
   writeln;
   repeat
      writeln('     "', sIzena, '" fitxategiaren bidea aukeratu:');
      writeln('     1.  ""');;
      writeln('     2.  "HemenGorde\"');
      writeln('     3.  GetCurrentDir + "\"');
      writeln('     4.  "HanGorde\"');
      writeln('     5.  "\Dev-Pas\HanGorde\"');
      writeln('     6.  "C:\Dev-Pas\HanGorde\"');
      writeln('     7.  "E:\Dev-Pas\HanGorde\"');
      writeln('     8.  "E:\"');
      writeln;
      write('Exekuzio-denborako errorea gerta daitekeen arren, bide bat aukeratu: ');
      readln(cAukera);
   until (cAukera >= '1') and (cAukera <= '8');
    
   case cAukera of
      '1': sIzena := '' + sIzena + '_aukera-' + cAukera + '.DAT';
    //'1': sIzena :=      sIzena + '_aukera-' + cAukera + '.DAT';
      '2': sIzena := 'HemenGorde\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '3': sIzena := GetCurrentDir + '\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '4': sIzena := 'HanGorde\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '5': sIzena := '\Dev-Pas\HanGorde\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '6': sIzena := 'C:\Dev-Pas\HanGorde\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '7': sIzena := 'E:\Dev-Pas\HanGorde\' + sIzena + '_aukera-' + cAukera + '.DAT';
      '8': sIzena := 'E:\' + sIzena + '_aukera-' + cAukera + '.DAT';
   end;
 
   writeln;
 
   if fileexists(sIzena) then
   begin
      writeln('"', sIzena, '" fitxategia existitzen da, lan egin dezagun.');
      writeln;
      FitxategiaIkusi(sIzena);
      FitxategiariElementuakGehitu(sIzena);
      FitxategiaIkusi(sIzena);
   end
   else
   begin
      writeln('"', sIzena, '" fitxategia ez da existitzen, sortuko dugu.');
      writeln;
      FitxategiaSortuEtaBete(sIzena);
      FitxategiaIkusi(sIzena);
   end;
 
   writeln;
   write('RETURN sakatu programa bukatzeko');
   readln;
end.
 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.