» »

[c# .net] Iskanje datotek

[c# .net] Iskanje datotek

Evolve ::

Pozdravljeni,

zanimajo me vaše izkušnje in rešitve kako pohitriti iskanje s pomočjo visual C#.

imam direktorjih, ki je razdeljen na več pod-direktorjev.
v teh direktorjih je cca 300.000 pdf datotek velikosti od 10kb pa do cca 1MB (vsaka ima unikatno ime).


Trenutna (začasna) aplikacija, ki jo uporabljam, uporablja enostavno iskanje, ko datoteko najde (po imenu) mi jo izpiše v texboxu, kjer se jo označi in potem se prikaže v pdf okvirju.

Ker je datotek ogromno(tedensko se jih doda več 1000), vse so shranjene na mrežni (synology), je iskanje zelo počasno.

Kako bi stvar vi pohitrili?

Hvala!

xardas ::

So datoteke v poddirektorijih nekako logično razvrščene po imenih?

mm&r ::

V kolikor se datoteke skozi ne dodajajo pa brišejo lahko v eno txt datoteko narediš index oz. seznam datotek, ki ga potem v aplikaciji naložiš v spomin in potem iščeš po spominu.

Evolve ::

xardas je izjavil:

So datoteke v poddirektorijih nekako logično razvrščene po imenih?


Ne.

V kolikor se datoteke skozi ne dodajajo pa brišejo lahko v eno txt datoteko narediš index oz. seznam datotek, ki ga potem v aplikaciji naložiš v spomin in potem iščeš po spominu.


Dodajajo se skoraj da dnevno. Ampak če bi bilo potrebno "bazo" dnevno ročno posodobiti ni nobenega problema.

smacker ::

Napiši scripto, ki prebere vse datoteke in jih zapiše v bazo (lahko je txt/csv file, če rabiš indexe in multithreading pa priporočam sql). Nastaviš da se poganja avtomatsko vsako noč (cron job). Pri iskanju iščeš po bazi, kar je hitreje kot iskanje po filesystemu (indexi, manj dostopov do diska,...). Če rabiš "sveže" podatke (torej iščeš datoteko, ki je bila naložena pred 5 minutami) potem moraš v primeru da datoteke nisi našel v bazi, izvesti še iskanje po disku.
Če je veliko takšnih poizvedb, za katere v bazi ne boš našel rezultata, potem moraš pripravit še program za nalaganje datotek, ki bo poleg tega da shrani file na disk hkrati še zapisal to v bazo - s tem boš zagotovil da bo baza vedno ažurna.

Evolve ::

smacker je izjavil:

Napiši scripto, ki prebere vse datoteke in jih zapiše v bazo (lahko je txt/csv file, če rabiš indexe in multithreading pa priporočam sql). Nastaviš da se poganja avtomatsko vsako noč (cron job). Pri iskanju iščeš po bazi, kar je hitreje kot iskanje po filesystemu (indexi, manj dostopov do diska,...). Če rabiš "sveže" podatke (torej iščeš datoteko, ki je bila naložena pred 5 minutami) potem moraš v primeru da datoteke nisi našel v bazi, izvesti še iskanje po disku.
Če je veliko takšnih poizvedb, za katere v bazi ne boš našel rezultata, potem moraš pripravit še program za nalaganje datotek, ki bo poleg tega da shrani file na disk hkrati še zapisal to v bazo - s tem boš zagotovil da bo baza vedno ažurna.


Ažurnost ni prioriteta.

Tudi sam se že malo gledal glede sql-a, sam nimam izkušenj glede hitrosti. Bi vi zapisovali pdf-je v bazo, ali samo pot pdf-jev?

smacker ::

V bazo hraniš tisto, po čemer iščeš. Če iščeš po imenu datoteke, potem zadošča pot. Če bi rad iskal po vsebini dokumentov, potem je smiselno naložene PDFe spravit v txt format (maš toole za to) in ga zapisat v bazo. Za take bolj kompleksne rešitve ni treba tople vode odkrivat, ziher najdeš kak search engine, ki ga le primerno prilagodiš za tvoj primer.
Najenostavnejša rešitev, ki bi omogočala iskanje datotek po imenih, je da v .txt zapišeš vse datoteke(poti). Za iskanje nato prebereš txt file v seznam in po njem narediš linq poizvedbo - nekaj takega:
string query = "iskalni niz";
List<string> string = File.ReadAllLines("baza.txt");
IEnumerable<string> result = list.Where(s => s.Contains(query));

Evolve ::

V bazo hraniš tisto, po čemer iščeš. Če iščeš po imenu datoteke, potem zadošča pot. Če bi rad iskal po vsebini dokumentov, potem je smiselno naložene PDFe spravit v txt format (maš toole za to) in ga zapisat v bazo. Za take bolj kompleksne rešitve ni treba tople vode odkrivat, ziher najdeš kak search engine, ki ga le primerno prilagodiš za tvoj primer.
Najenostavnejša rešitev, ki bi omogočala iskanje datotek po imenih, je da v .txt zapišeš vse datoteke(poti). Za iskanje nato prebereš txt file v seznam in po njem narediš linq poizvedbo - nekaj takega:
string query = "iskalni niz";
List<string> string = File.ReadAllLines("baza.txt");
IEnumerable<string> result = list.Where(s => s.Contains(query));



Super, bom preveril.
Hvala zaenkrat.

kr?en ::

Evolve ::

kr?en je izjavil:

Uporabis Lucene?

https://lucenenet.apache.org/


Zaenkrat mi je uspelo z txt datoteko.

Če stvar ne bi bila bistveno hitrejša od trenutnega iskanja, bom preizkusil je lucene fukncijo

Isotropic ::

potem se prikaže v pdf okvirju.

kakšen pdf okvir to? lahko prikažeš vsebino pdf v svoji aplikaciji? bi se dalo izvedeti, kako?

Evolve ::

Isotropic je izjavil:

potem se prikaže v pdf okvirju.

kakšen pdf okvir to? lahko prikažeš vsebino pdf v svoji aplikaciji? bi se dalo izvedeti, kako?


iskan pdf se prikaže v isti aplikaciji s pomočjo axacropdf funkcije


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[JAVA] Izpis imen vseh datotek iz direktorija in poddirektorijev

Oddelek: Programiranje
213933 (1962) Slovenet
»

Online baza

Oddelek: Programiranje
241934 (1227) Yacked2
»

Vnos podatkov v bazo s pomočjo visual studia

Oddelek: Programiranje
6960 (742) deninho1989
»

problem v C#

Oddelek: Programiranje
211714 (1429) dvojka
»

[Delphi] Izbira podatkovne baze

Oddelek: Programiranje
222325 (1785) zhigatsey

Več podobnih tem