Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tiedoston haku ja muokkaus

Sivun loppuun

Cc [28.01.2005 20:13:09]

#

Olen tekemässä ohjelmaa joka toimii winsockin perusteella ja hakee omalta koneeltani tiedoston ja tuo sen richtextboxiin clientille (missä nytten clien onkaan). Olen testaillut erilaisia tapoja mutta en ole saannut ainoatakaan toimimaan joten tulin pyytämään ammattilaisilta apua.

tuomas [28.01.2005 20:56:42]

#

Lähetä siis serverille aluksi tiedoston nimi ja polku..

winsock1.senddata "C:\testifilu.txt"

Tämän jälkeen sitten serverissä vastaanotetaan data avataan haluttu tiedosto..

Dim Data1,Data2 As String

winsock1.getdata Data1

open data1 for binary as #1
     data2 = Input(FileLen(data1), #1)
close #1
'ja lähetetään tiedosto..
winsock1.senddata data2

sitten clientissä avaat filun ja tallennat tulevan data sinne.

Cc [28.01.2005 23:02:43]

#

Hyvä muuten (ainanki helpompi kuin omani nimittäin yritin tehdä omaa proseduuria jne. :P) mutta se huuta tuosta

Open Data1 for binary as #1

rivistä mikäköhän siinä oikein on?

Puhveli [28.01.2005 23:20:38]

#

Mitä se valittaa? Ootko imuroinu hiirellä sen tekstin päältä tai selvittäny muuten Data1:n arvon? Kokeile laittaa varmuuden vuoksi pelkkä Close ilman #numeroo ennen Openia, se joskus voi toimia. Mut joskus vbkin vaan bugaa noitten tiedostonavausten kanssa silleen ettei sitä oikein voi käyttäjä korjata vaan pitää esim vaihtaa subin nimee tai jtkn, mulla on käynyt niin.

Cc [28.01.2005 23:32:19]

#

Se sanoo että: "Bad File name or number" en ole muuttannut mitään tuosta pätkästä. Olen kyllä kokeillut mutta en onnistunnut.

tuomas [29.01.2005 00:03:29]

#

Joo, eli pistä vaikka msgboxiin tiedoston nimi tuossa vastaanotossa niin näet että se on varmasti oikein.. Ja tuo bad file number voisi viitata siihen että jokin tiedoston on jo avattu numerolla #1.

Cc [29.01.2005 00:08:38]

#

Ei itse asiassa toimi vaikka vaihdoin tuon #1 muuksi ja laitoin vastaan ottoon että se tulee msg boxiin silti tulee "bad file name or number"

EDIT: tai siis tulee msgbox esille mutta se on tyhjä.

sqwiik [29.01.2005 15:23:43]

#

Siinä se vika onkin; et voi avata ""-nimistä (tyhjä string) tiedostoa. Laita se tiedoston avaaminen ehtolauseen taakse: tiedosto avataan vain jos socketista on tullut jotain muuta kuin "".

Cc [29.01.2005 15:45:18]

#

En onnistunnut tekemään toimivaa ehtolausetta tuli huutoa
"Argument is not optional."

sqwiik [29.01.2005 16:09:47]

#

Tuomasta lainaten...

Dim Data1,Data2 As String

winsock1.getdata Data1

If Data1 <> "" Then

open data1 for binary as #1
     data2 = Input(FileLen(data1), #1)
close #1
'ja lähetetään tiedosto..
winsock1.senddata data2

End If

Eli siihen senddata/getdata:aan ei tarvitse muuten koskea.

tuomas [29.01.2005 16:11:48]

#

laita siihen että:

if data1 = <> "" then

   'tähän väliin tiedoston aukaisu

end if

Edit: höh, sqwiik kerkes ensin :(

Cc [29.01.2005 16:22:16]

#

If Data1 <> "" Then

"Type mismatch" tulee tuosta rivistä.

Antti Laaksonen [29.01.2005 18:30:31]

#

Vilkaisepa, mitä muuttujassa Data1 on. Muuttujan tyyppi on määrittelyn perusteella Variant, mutta silloin vertailun pitäisi kyllä onnistua.

Cc [29.01.2005 18:34:20]

#

Nyt o pakko kyllä myöntää että en ihan tajunnut. =)

Antti Laaksonen [29.01.2005 18:37:34]

#

Eli kun virheilmoitus tulee, paina Debug. Vie sitten hiiri koodissa näkyvän muuttujan nimen kohdalle, jolloin muuttujan arvo tulee näkyviin. Voit myös kirjoittaa ikkunan alaosassa olevaan Immediate-ikkunaan "?Data1", jolloin muuttujan arvo tulee myös näkyviin. Tällä tavalla virheiden löytäminen helpottuu. :)

Cc [29.01.2005 18:52:05]

#

Tuota minä en tiennytkään. sieltä tuli "??????" kun laitoi tuolleen

tuomas [29.01.2005 19:12:14]

#

Määrittele datan lähetyksessä sekä vastaanotossa muuttujat string-tyyppisiksi.

Puhveli [29.01.2005 19:29:07]

#

Hmm.. Ootko varma että winsokkis saa mitään dataa. Kun sokilla on se eventti DataArrival joka aktivoituu (tai suorittautuu tai jotain) heti kun sokki saa dataa, mutta muistaakseni muussa tapauksessa GetData ei palauta mitään.
Edit: Eli laita tuo koodi winsock1_DataArrival-subiin.

sooda [29.01.2005 19:35:41]

#

tuomas kirjoitti:

Dim Data1,Data2 As String

Tässä vika. Toi dimmaa Data1:n variantiksi ja Data2:n stringiksi. Laita

Dim Data1 As String, Data2 As String

variant-tyyppiin ei kannata ottaa soketista dataa. Se sottaantuu.

Puhveli [29.01.2005 19:51:08]

#

no kyllä on vbkin pilkunviilaamista ... :P

Cc [29.01.2005 20:53:05]

#

No niin nytten toimii kiitokset kaikille jotka ovat minua auttanneet.

EDIT: Yksi kysymys on vielä kun painan sitä suurennus nappia tuolta formin yläreunasta niin pelkkä formi suurenee mutta miten saisin että nuo osat (richtextbox jne) suurenisivat formin kanssa samalla?

EDIT: Vielä toinen kysymys kun haen tuon tiedoston tuolta koneelta niin en saa clientille kuin 7 riviä tekstiä vaikka kyseisessä tiedostossa on paljon paljon enemmän tekstiä. mikäköhän siinä on?

Metabolix [30.01.2005 14:24:39]

#

Cc kirjoitti:

miten saisin että nuo osat (richtextbox jne) suurenisivat formin kanssa samalla?

Löytyisiköhän siitä RichTextBoxista ominaisuus Anchor, johon voisi lisätä Topin ja Leftin lisäksi vielä Bottomin ja Rightin?

Cc kirjoitti:

en saa clientille kuin 7 riviä tekstiä

En tiedä, mutta onko käytettävällä datatyypillä ehkä jokin kokorajoitus? Tai ehkä socketin buffereilla?

tuomas [30.01.2005 23:39:10]

#

Lisää tekstilaatikoiden yms. koon muuttaminen form_resize aliohjelmaan.

Jos data ei meinaa siirtyä kokonaan kannattaa aloittaa tarkistamalla että, tiedostoa ladattaessa kaikki data on tallessa.. ja sitten että kaikki on tallessa vielä siellä toisessakin päässä. Eli, miten tallennat tulevan datan / säilytät ennen tallennusta?


Sivun alkuun

Vastaus

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

Tietoa sivustosta