Toon posts:

[Alg] Progressie van zoek operatie

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig om een zoek optie te maken in een programma waar ik mee bezig ben. De bedoeling is dat de gebruiker kan kiezen om alle schijven, een bepaalde schijf of een bepaalde directory kan doorzoeken. Het probleem wat ik echter vind is dat het erg moeilijk is om de voortgang van de zoek operatie weer te geven.

Er staat een progressbar onderaan het schermpje die dus moet gaan weergeven hoe ver die is. Maar als je dit precies wilt doen moet je eerst alle directories gaan tellen die er zijn. Als je dat dus wilt doen voor alle schijven inclusief subdirectories ben je eerst een paar minuten bezig met tellen van het aantal directories dat er zijn en vervolgens nog eens al die directories door gaan zoeken. Geen efficiënte methode dus.

Nu vraag ik me af hoe je een dergelijk systeem toch makkelijk kunt invoegen. Want het wordt wel vaak gebruikt in programma's, dus het moet toch kunnen. Ik heb net geprobeerd om eerst te tellen hoeveel directories er in de root directory zijn en daar vervolgens een bepaalde macht op toe te passen, maar dat werkt natuurlijk niet omdat 't bijna niet te gokken is hoeveel subdirectories elke directory heeft.

Kortom, een wiskundig probleem eigenlijk, maar het leek me wel passen in dit forum, dus ehm, brand maar los :).

Verwijderd

Je kan het aan MB gebruiken ipv het aantal directories om je search voortgang op te baseren.

Verwijderd

Topicstarter
Ehmz, het aantal MB dat op de schijf staat bedoel je? Volgens mij werkt dat niet helemaal aangezien ik zoek op specifieke bestanden of zie ik dat nou weer verkeerd?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Hij bedoelt dat je eerst even gaat tellen hoeveel mb je moet doorzoeken (volgens mij is dat ook wel een kostbare operatie). En iedere keer als je een file hebt gehad, kan je die filesize bij je behandelde size optellen en heb je een groffe indicatie van vooruitgang.

Verwijderd

Topicstarter
Ehmz, volgens mij is het bepalen van de totale schijf niet zo'n probleem? Dat kan je toch wel via een API of zo krijgen?

Verwijderd

Als het goed is moet je heel snel de 'used space' van een hele drive opvragen. Als je binnen directories gaat werken is dat echter weer een ander verhaal.

Verwijderd

Topicstarter
Mjah, als je binnen directories gaat werken moet je eerst weer de hele directory doorwandelen waarschijnlijk en kijken hoe groot de bestanden in die directory zijn. Maar dat is nog wel te overzien, beter dan voor een hele drive of alle drives dat gaan opvragen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 19 oktober 2002 @ 15:12:
Mjah, als je binnen directories gaat werken moet je eerst weer de hele directory doorwandelen waarschijnlijk en kijken hoe groot de bestanden in die directory zijn. Maar dat is nog wel te overzien, beter dan voor een hele drive of alle drives dat gaan opvragen.
En wat als iemand nou als basis je c schijf opgeeft? Dan zul je recursief alle dirs moeten doorlopen en dat is zeker niet goedkoop! (Heb het wel eens onder linux dat ik op / begin te zoeken en dan pakt ook ie ook al mijn windows partities).

Verwijderd

Topicstarter
Ehmz, jah, als de basis de C schijf is dan kan die dat ook als een drive beschouwen en kan die vervolgens de hele grote van de drive pakken. Vervolgens kun je alle directories recursive doorlopen en steeds de grote van de directories optellen bij de gevonden grote.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Wat ik ermee zeggen wou, is dat een groot deel van de totale zoekactie zal bestaan uit het bepalen van de totale directory grote. En je kan je dan gaan afvragen of dat acceptabel is. Doe maar eens een 'dir /s' in c : \

Verwijderd

Topicstarter
Ehmz, mjah, dat is zo jah. Maar heb je nog een beter idee dan?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 19 oktober 2002 @ 15:20:
Ehmz, mjah, dat is zo jah. Maar heb je nog een beter idee dan?
Eigelijk niet nee. Als ik eerlijk ben vind ik het ook een rotprobleem omdat je niet meteen kan overzien hoeveel er doorzocht moet worden.

Verwijderd

Topicstarter
Alarmnummer schreef op 19 oktober 2002 @ 15:22:
[...]

Eigelijk niet nee. Als ik eerlijk ben vind ik het ook een rotprobleem omdat je niet meteen kan overzien hoeveel er doorzocht moet worden.
Lol, jah, gelijk heb je, maar je zou toch zeggen dat 't moet kunnen want 't wordt wel eens toegepast in programma's.

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Welke programma's doen dit dan wel?

Als ik kijk naar Windows' search dan gaat er gewoon een animatie lopen, als ik naar bv ArcServe (backup programma) kijk, dan zit er een optie in waarmee je kan bepalen ofdat je een nauwkeurige progress indicatie wil (en dus dat ie alles eerst gaat tellen) en Sophos (AV) heeft dezelfde optie.

Voor de rest kan ik me eigenlijk geen specifiek programma herinneren wat dit weergeeft en ook nog eens nauwkeurig doet.

Verwijderd

Topicstarter
Hmmz, ik heb het nu geimplementeerd met behulp van de grote van het te doorzoeken spul te bepalen en vervolgens steeds bij houden hoeveel je gehad hebt. Zo te zien werkt het, maar op het eind loopt het nog niet helemaal lekker, maar goed, dat zal wel een bugje zijn in m'n programma.

Wil jullie allemaal bedanken voor de hulp. Dit bleek inderdaad een handige methode te zijn. Goed het zoeken duurt nu wel ietsjes langer, maar 't is geen dramatische vertraging geworden, best acceptabel :).

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Het nut van een progressbar is dat het de gebruiker laat zien 1) hoeveel % van de taak gedaan is 2) dat de applicatie dus nog bezig is. Dat laatste is het belangrijkste. Er zijn gewoon processen waar een voortgang moeilijk te visualiseren zijn. Het beste kun je hiervoor dan een animatie oid laten zien. Het gaat erom dat de gebruiker ziet dat het programma bezig is. Een logscherm kan dan bv ook effectief zijn.

oogjes open, snaveltjes dicht


Verwijderd

Je zou het mischien kunnen doen door:

1. Tellen hoeveel schijven erzijn.
2. Totale 'space used' bijelkaar op te tellen (dat moet toch wel op te vragen zijn per schijf?)
3. Als je dan een directorie doorgezocht hebt (kijk je hoeveel space er in die directorie stond.)
4. Daaruit kun je dan weer opmaken hoeveel je nog zou moeten zoeken.

Het enige probleem wat je dan weer zou krijgen is SlackSpace, maar hoe je dat zou kunnen oplossen zou ik ook niet durven zeggen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Je kunt je ook afvragen of je programma de informatie wel zo goed moet bepalen. Als je gewoon het aantal gelezen files, en de totale grootte daarvan laat zien, dan kan de gebruiker zien dat er voortgang wordt geboekt. Als hij weet hoe groot de files samen zijn dan heeft hij ook een relatief idee hoever het programma is.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Verwijderd schreef op 19 oktober 2002 @ 18:45:
Je zou het mischien kunnen doen door:

1. Tellen hoeveel schijven erzijn.
2. Totale 'space used' bijelkaar op te tellen (dat moet toch wel op te vragen zijn per schijf?)
3. Als je dan een directorie doorgezocht hebt (kijk je hoeveel space er in die directorie stond.)
4. Daaruit kun je dan weer opmaken hoeveel je nog zou moeten zoeken.

Het enige probleem wat je dan weer zou krijgen is SlackSpace, maar hoe je dat zou kunnen oplossen zou ik ook niet durven zeggen.
Deze methode heb ik nu gebruikt in m'n programma en het werkt prima. Probleem is alleen dat ik een afwijking heb van ongeveer 1 GB. Dat is toch wel redelijk veel, zeker wat betreft eventuele afrondingsfouten. Blijkbaar vergeet ik ergens een directorietje te tellen of zo, maar zou niet weten waar.

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 27-08 21:32
Don Facundo schreef op 19 oktober 2002 @ 16:59:
Het nut van een progressbar is dat het de gebruiker laat zien 1) hoeveel % van de taak gedaan is 2) dat de applicatie dus nog bezig is. Dat laatste is het belangrijkste. Er zijn gewoon processen waar een voortgang moeilijk te visualiseren zijn. Het beste kun je hiervoor dan een animatie oid laten zien. Het gaat erom dat de gebruiker ziet dat het programma bezig is. Een logscherm kan dan bv ook effectief zijn.
Een waarheid als een koe en één van de eerste regels van UI design. Ik zou in dit geval gewoon aangeven welke directory je op dit moment bezoekt (wat als het goed is heel erg vaak per sec. verandert, waardoor het dus duidelijk is dat je programma bezig is). Verder natuurlijk ook een mogelijkheid om de operatie af te breken ('responsive' interface dus).

Als het een mogelijkheid is je programma onder de GPL te plaatsen, kun je ook nog naar een implementatie van (standaard unix utility) df kijken, misschien zijn daar nog wat ideeën op te doen.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet

Pagina: 1