Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Tekstitiedoston haku kansiosta

Sivun loppuun

ZuBer [29.01.2011 12:49:33]

#

Miten saisin toteutettua haun, joka etsisi tekstitiedostoa tietystä kansiosta ensiksi otsikoista, ja sitten tiedostojen sisällöstä? Sitten näyttäisi tulokset.

Käytössä on tuo Visual Basic Express Edition (kai).

//Etsisi siis käyttäjän syöttämällä hakusanalla.

jtha [29.01.2011 19:26:26]

#

Et tarvitse Visual Basicia. Windowsin käyttöjärjestelmässä on jo etsi-toiminto, jolla voi tehdä kyseisen haun.

ZuBer [29.01.2011 19:54:48]

#

No niin, tuo sisältyisi yhteen ohjelmaan... Ja onhan niitä muitakin sellaisia ohjelmia, mitkä ovat jo valmiina ja joku tekee silti...

Hennkka [29.01.2011 20:29:01]

#

Jos haluat ihan alusta lähteä luomaan, niin System.IO:sta löytyy tiedostofunktioita.

Itse lähtisin ratkaisemaan siten, että on yksi yleinen List-muuttuja, johon kootaan tulokset. Funktio listaisi kaikki kansiot ja tarkistaisi niiden sisällöt rekursiolla. Sen jälkeen funktio listaisi kaikki tiedostot ja suorittais haun. Jos sopii, lisätään listaan.

ZuBer [31.01.2011 14:20:58]

#

Uusi ongelma:
Käytän StreamReaderia tekstitiedoston lukemiseen sillä tavalla, että polku on määritelty jo valmiiksi. Pitääkö tietokoneeseen asentaa joku kirjasto, että se toimisi, koska aina kun yritän käyttää systeemiä, se valittaa, että tiedostoa ei löydy, vaikka se varmasti on siellä?

Metabolix [31.01.2011 15:34:35]

#

Ei, vaan teet vain jotain väärin. Kerro vielä, millaisen polun olet kirjoittanut ohjelmaan, mikä on tiedoston koko polku ja mikä on ohjelmasi koko polku.

ZuBer [31.01.2011 16:53:54]

#

Listboxista valitaan jokin vaihtoehto. Se merkkijono on muuttuja "valittu".
"C:\Textit\" & valittu & ".txt"

Tiedosto on toisella koneella joten en tiedä sen polkua, mutta se on se oletus eli jotakin tyyliin:
C:\Documents and Settings\EsimerkkiErkki\My Documents\Visual Basic 2008\Projekts\...?
Tuo oli ulkomuistista ja varmaankin väärin...

Hennkka [31.01.2011 17:07:07]

#

Oletko kokeillut debugata, mitä tiedostoa se oikeasti yrittää avata? Eli klikkaat sieltä vasemmalta breakpointin ja suoritat. Kun sitten ohjelma pysähtyy siihen kohtaan, maalaat tuon tekstin ja painat "Add Watch" tai "QuickWatch". Olethan myös tarkistanut, että tuo tiedosto on olemassa? Näyttäisitkö koodin?

ZuBer [31.01.2011 17:46:57]

#

Dim valittu As String

   Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
       valittu = ListBox1.SelectedItem

       Dim polku As String = "C:\Textit\" & valittu & ".txt"
       Dim objReader As New System.IO.StreamReader(polku)
       TextBox1.Text = objReader.ReadToEnd
       objReader.Close()

Grez [31.01.2011 17:48:17]

#

Kun tuo heittää poikkeuksen, niin kopioi se leikepöydälle ja laita näkyville.

Kannattaa myös tarkastella mitä valittu pitää sisällään ja toisaalta mitä on "C:\Textit\" & valittu & ".txt", ettei vaan olisi "C:\Tekstit\{Object}.txt"

ZuBer [31.01.2011 18:00:44]

#

Could not find file 'C:\Textit\Esimerkki.txt'.

Metabolix [31.01.2011 18:03:26]

#

Tässä herää väkisinkin epäilys, että tuollaista tiedostoa ei ihan oikeasti ole käyttäjän koneella. Oletko aivan varmasti tarkistanut asian?

ZuBer [31.01.2011 18:06:52]

#

Juu moneen kertaan.

Grez [31.01.2011 18:28:42]

#

No ainakin polku on olemassa, meinaan tällainen tuli itsellä kun yritin ilman polkua..

System.IO.DirectoryNotFoundException was unhandled
  Message=Could not find a part of the path 'C:\Textit\Esimerkki.txt'.
  Source=mscorlib

Ja tällainen kun tiedostoa ei löydy, mutta polku on olemassa:

System.IO.FileNotFoundException was unhandled
  Message=Could not find file 'C:\Textit\Esimerkki.txt'.
  Source=mscorlib
  FileName=C:\Textit\Esimerkki.txt

Tuohan on ZuBerin ilmoittama virhe.

Ja sitten kun tiedosto oli olemassa, niin ei tullut virhettä.

Tiedän myös, että jos tiedosto oikeasti olisi olemassa, mutta homma ei muuten onnistuisi, niin tulisi toisenlainen virheilmoitus. Esimerkiksi jos ei ole lukuoikeutta, niin

System.UnauthorizedAccessException was unhandled
  Message=Access to the path 'C:\Textit\Esimerkki.txt' is denied.
  Source=mscorlib

Eli voisin sanoa että todennäköisyys on aika tasan 100% sen suhteen, että koneella jossa tuo virheilmoitus tuli ei ollut tuota tiedostoa.

Ja sitten jos pitäisi vielä arvata, niin siellä on tietysti joku Esimerkki.txt.txt ja koneessa on päätteiden piilotus päällä, jolloin explorer näyttää Esimerkki.txt

ZuBer [31.01.2011 18:36:23]

#

Grez kirjoitti:

Ja sitten jos pitäisi vielä arvata, niin siellä on tietysti joku Esimerkki.txt.txt ja koneessa on päätteiden piilotus päällä, jolloin explorer näyttää Esimerkki.txt

Kiitos paljon! Tuo auttoi! En ollut tottunu tuohon, että siihen ei pidä kirjoittaa .txt perään.

Iiiiso Kiitos, Grez!

ZuBer [01.02.2011 11:42:55]

#

The process cannot access the file 'C:\Tekstit\Esimerkki.txt' because it is being used by another process.

Mitäs tuo meinaa? :O

Grez [01.02.2011 12:27:57]

#

Se meinaa sitä, että jokin toinen ohjelma on lukinnut ko. tiedoston omaan käyttöönsä. Eli onkohan tiedosto auki jossain muussa ohjelmassa?

ZuBer [01.02.2011 12:55:47]

#

Ei pitäisi.

Grez [01.02.2011 13:00:29]

#

Entä oma ohjelmasi? Olisiko jäänyt joku streami sulkematta tms? Kannattaa myös katsoa, ettei omasta ohjelmasta ole jäänyt aiempi prosessi käyntiin vaikka olet sulkenut sen.

ZuBer [01.02.2011 13:10:09]

#

Kiitos! Tuo Auttoi!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta