Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C# hakuvirhe tiedostojen ja nimien haussa ?

Sivun loppuun

Zam [06.01.2011 23:41:26]

#

Moikka,

Voisiko ongelma liittyä itselläni olevaan Windows 7 Pro 64bit järjestelmään jossa seuraava ohjelmakoodi antaa virheen.Olen käyttänyt "Directory-luokkaa" ja olen ottanut sen mukaan alussa ”using System.IO”:lla. Vai voikohan käyttis blokata tämän suorittamisen jotenkin.

Console.WriteLine("Tiedostot ja hakemistot, joiden nimistä löytyy r*t");

            /* Haetaan hakemiston sellaisten tiedostojen
             * ja hakemistojen nimet, joiden nimet alkavat r:llä ja
             * loppuvat t:llä.
             * r:n ha t:n välillä voi olla muuta tekstiä.       */

            string[] sisalto = Directory.GetFileSystemEntries(hakemisto, "r*t");

            foreach (string elementti in sisalto)
                Console.WriteLine(elementti);

Zam [07.01.2011 01:01:56]

#

Lisäyksenä tuo hakemisto on string -taulukko joka luotu koodissa aiemmin ja joka sisältää hakemistopolun. Mutta tämä itse ongelma saattaisi olla levyjaot jotka eivät ole yhteydessä kuten ulkoinen levyasema.

Hennkka [07.01.2011 08:32:14]

#

Suostuuko tuo edes kääntymään, koska minulla se herjaa, että GetFileSystemEntries ei voi ottaa parametrikseen string-taulukkoa?

Vaihda hekemisto muuttuja string[]-tyypistä string-tyyppiin niin eiköhän toimi :)

Zam [07.01.2011 18:24:34]

#

Tuli kirjattua hakemisto pieleen, eli minulla tämä on määriteltynä näin, jos tätä tarkoitit ja sen jälkeen tulee aiemmin viestittämäni koodi

string hakemisto = "C:\\Temp\\sekalaisia";

(Mod. huom: älä pelleile niillä muotoiluilla, ja C#:n kooditagi on koodics tai koodic#.)

Zam [07.01.2011 22:46:10]

#

En tosiaankaan tahallani sekoile noiden tagien kanssa, kaikki tämä on minulle
vielä opiskelua. Pahoittelen jos tästä aiheutui haittaa

Metabolix [07.01.2011 22:54:12]

#

Miksi sitten kirjoitit tuonkin viestin aivan turhiin [t]-tageihin, ja miksi katkot enterillä rivejäsi kesken kaiken?

Auttamista edistäisi huomattavasti, jos kertoisit edes, millainen virhe koodista tulee.

Zam [08.01.2011 01:03:36]

#

Poikkeus käännöksen aikana.Minulla tuo tiedosto kyllä löytyy hakemistosta.
Virheilmoitus alla.

Käsittelemätön poikkeus: System.IO.DirectoryNotFoundException: Polun C:\Temp\sek
alaisia\ osaa ei löytynyt.
kohteessa System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

groovyb [08.01.2011 01:50:10]

#

Tarkista osoite isoista ja pienistä kirjaimista (ja muutenkin, tuo virhe tulee kun osoite on väärin. As in directory not found). C# on case sensitive kieli.

Grez [08.01.2011 11:38:30]

#

groovyb kirjoitti:

C# on case sensitive kieli.

Mutta Windowsin levyjärjestelmät ei ole. Tosin tässähän sanottiin että virhe saattaisi olla levyjaot. Mutta mutta kielen itsensä case-sensitiivisyys ei kuitenkaan liity aiheeseen.

Tuossa virheilmoituksen yhteydessähän se sanoo, mikä hakemisto ei löydy.

Virheilmoitus johtuu yksiseliteisesti siitä, että ko. hakemistoa ei ole olemassa. Jos ongelma olisi käyttöoikeuksissa, niin ilmoitus olisi:

System.UnauthorizedAccessException was unhandled
Message=Access to the path 'C:\Temp\sekalaisia\' is denied.

(kysyjällä tosin sama suomeksi)

Zam [08.01.2011 12:24:30]

#

tein toisen string hakemisto2 ja polun viittasin Install -hakemistoon ja paluuarvona hain "*.exe" , eli kaikki Install -hakemistossa olevat .exe -tiedostot ja tässä tuo toimi moitteetta.Polku on oikein ekassakin (string hakemisto = ...),koska käytän sitä muussa ohjelmakoodissa ja on toiminut. Täytyy saada ratkaistua vielä tuo ongelma kuitenkin.Ehkä tuo kaatuu kun haen tiedostojen ja hakemistojen nimiä joista ei löydy r alkavia ja t:llä loppuvia tiedostojen nimiä, siellä on kyllä 2 .txt -tiedostoa :).En ole käsitellyt vielä C#-koodissa "poikkeusten käsittely" jolla korjata tämä,jos se tästä johtuu.

Grez [08.01.2011 12:34:57]

#

Hieman sekavaa tuo tekstisi.

Kuitenkin väittäisin että on useampiakin kertaluokkia todennäköisempää, että sähläät itse jotain (esimerkiksi hakemisto muuttujassa ei olekaan se mitä luulet) kuin että kuvaamasi koodi antaisi System.IO.DirectoryNotFoundException poikkeuksen sellaisesta hakemistosta, joka on olemassa.

Zam [08.01.2011 13:05:18]

#

Grez kiitos taas kerran vaivannäöstäsi.Vaikka kuinka katsoin stringissä olevaa polkua, en heti huomannut yksinkertaista virhettä.sekalaiset on .txt tiedosto eikä hakemisto.Aika pahis moka!.Modille sen verran kysymystä jos tämän luet, niin tuleeko näihin teksteihin laittaa mitään tageja ?, vai ainoastaan jos laittaaa tänne koodia.Kyllä mä vielä nämä hanskaan, pientä malttia meitsin kanssa.

Grez [08.01.2011 13:20:16]

#

Uskon pystyväni vastaamaan modien puolesta :D

Ihan pelkkää tekstiä kirjoittaessa ei kuulu laittaa mitään tageja. Toki esimerkiksi lihavointi-tagia voi käyttää jos on jokin asia jota täytyy korostaa. Mutta harvemmin niitä tulee käytettyä ja varsinkin jos viestissä on hirveän monta kohtaa korostettuna, niin siitä on enemmän haittaa kuin hyötyä.

Lisäksi kannattaa yrittää kirjoittaa selkeää tekstiä. Tekstiä voi selkeyttää esimerkiksi jakamalla kappaleisiin, eli laittamalla tyhjä rivi kappaleiden väliin. Itse pyrin kirjoittamaan mahdollisimman selkeästi, koska mielestäni se kuuluu peruskohteliaisuuteen. Kyse on tavallaan siitä, meneekö minulla minuutti kauemmin kirjoittaa viesti, vai lukijoilta minuutti kauemmin kultakin yrittää saada viestistä selvää.

Blaze [08.01.2011 13:59:40]

#

Ja kuten kaiken maailman tekstinkäsittelykursseilla tankataan, sitä entteriä painetaan vain kun halutaan uusi kappale. Rivitys toimii automaattisesti.


Sivun alkuun

Vastaus

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

Tietoa sivustosta