VB 2008 express   otázka

VB.NET

dobry den mam maly problem , udelal jsem si program pres ktery stahnu soubor :

 My.Computer.Network.DownloadFile("http://files.beethacksxp.webnode.cz/200000018-ec073ed010/update.txt", "C:\NECO\update.txt")

ale jak ten soubor stahnu podruhe tak mi to pise ze soubor jiz existuje , nevite jak udelat aby se soubor dal stahnout i vicekrat ... nebo mi tu napsat nejaky kod pro preskoceni ulohy

Teprve zacinam ve VB takze prosim strpeni , dekuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak si napište metodu,které předáte název souboru a daná metoda zjistí zda již soubor existuje,pokud ano,vrátí třeba "false",což bude znamenat,že hl.metoda nebude volat download,ale zobrazí např.dialog.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nechapu , teprve zacinam . Nemuzes sem pridat vysledny kod ?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Dobrý den,

zkuste to takto:

     Function SaveFile(ByRef filePath As String)


        If System.IO.File.Exists(filePath) = True Then

            'soubor už existuje, změňte název souboru (za jméno přidáme prefix - kopie)
            Dim cestaSlozky As String = System.IO.Path.GetDirectoryName(filePath)
            Dim nazevSouboru As String = System.IO.Path.GetFileNameWithoutExtension(filePath) & " - kopie"
            Dim koncovka As String = System.IO.Path.GetExtension(filePath)


            Dim novaCesta As String = System.IO.Path.Combine(cestaSlozky, nazevSouboru & koncovka)
            SaveFile(novaCesta)


            Return Nothing
        Else
            'soubor neexistuje, můžete ho uložit
            My.Computer.Network.DownloadFile("http://files.beethacksxp.webnode.cz/200000018-ec073ed010/update.txt", filePath)
            Return Nothing
        End If


    End Function

Princip je jednoduchý, této funkci předáte cestu nově ukládaného souboru. Funkce File.Exist zjistí, zda v zadaném umístění už není uložen soubor se stejným jménem. Pokud ne, uloží ho. Pokud funkce zjistí že už tam je, přidá za jméno souboru " - kopie" a zavolá sama sebe (tzv. rekurzivní volání) aby zjistila, zda tam nově pojmenovaný soubor také není. Pokud ano, zase přidá další prefix " - kopie" a tak pořád dokola, dokud nenarazí na jméno, které je volné.

To slepování stringů tam je jen pro demonstrační účely aby bylo jasné, jak vytáhnout cestu složky, název souboru bez koncovky a koncovku. Jsem si vědom že by to šlo napsat elegantněji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

A mne sa vidí, že tým Vašim skladaním reťazcov dostanete cestu podobnú tomuto: "C:\Users\<username>\Desktop\update - kopietxt" Chýba tam bodka medzi názvom a príponou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

U mě se to zobrazuje korektně s tečkou před příponou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dekuji , ale co kdyz pustim program po 1. tak mi to stahne bez problemu . Ale kdyz stahnu soubor po 2. tak chci aby se puvodni soubor vymazal a stahl se ten novy ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to už si snad,proboha,domyslíte,ne? Myslim,že vám byl postup dost jasně nastíněn a předveden.

Pokud nezvládnete napsat jednoduchou metodu nebo podmínku,tak se nemá cenu patlat s takovýmto "projektem",ale spíše vzít do ruky knihu a začít se učit

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tom případě použíjte toto a nic jiného nemusíte řešit:

My.Computer.Network.DownloadFile("http://files.beethacksxp.webnode.cz/200000018-ec073ed010/update.txt", "C:\NECO\update.txt", "", "", False, 100, True)

Ten poslední parametr nastavený na true říká, že pokud ve složce existuje soubor se stejným jménem, chcete ho přepsat.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

tenhle prikaz je perfektni ,ale dal jsem si ho na button1 ,a jak na nej kliknu 2x a vic tak mi to vyhodi error v podobe :"The request was aborted: The request was canceled." ,dekuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak to zkuste jinak - existující soubor nejprve smazat

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim soubor As String = "C:\NECO\update.txt"
  If IO.File.Exists(soubor) Then
    IO.File.Delete(soubor)
  End If

  My.Computer.Network.DownloadFile("http://files.beethacksxp.webnode.cz/200000018-ec073ed010/update.txt", soubor)
End Sub

a pokud byste chtěl automaticky ukládat do nových souborů, pak třeba

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim idx As Integer = 0
  Dim soubor As String = "C:\NECO\update.txt"

  Do While IO.File.Exists(soubor)
    idx += 1
    soubor = "C:\NECO\update" & CStr(idx) & ".txt"
  Loop
  My.Computer.Network.DownloadFile("http://files.beethacksxp.webnode.cz/200000018-ec073ed010/update.txt", soubor)
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co se to tady pořád řeší za hovadiny? Jeden z overloadů metody DownloadFile má jako Boolean parametr jestli se má existující soubor přepsat nebo ne, tak proč by se měl předtím mazat explicitně?!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tazatel na tento tip sdělil, že mu program hlásí chybu. Nezkoumal jsem proč a zkusil jsem to. Dochází rovněž k chybě. Ta hovadina se smazáním funguje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mockrat dekuji , tenhle kod je PERFEKTNI, dekuji mnohokrat :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Každý raz začínal, to je jasné. Ale sú určité základy, ktoré by ste si mali naštudovať sami, a nie sa na ne pýtať. Čo sa týka znalostí jazyka a jeho kľúčových slov, a celkovo syntaxe, na toto sú tu články v sekcii Začínáme a určite sú aj inde. Za druhé je na programovanie nevyhnutné vedieť dobre po anglicky, keďže väčšina zdrojov je v tomto jazyku. A pokiaľ ide o znalosť dostupných knižníc .NET Frameworku, ich kompletný popis nájdete na MSDN, veľa vecí aj s príkladmi. A taktiež pomôže v tomto smere Object Browser(funkcia Visual Studia) .A nakoniec tzv. Intellisense, čo je funkcia Visual Studia, ktorá Vám napovedá, čo máte napísať. Použitím týchto vecí by ste mali byť schopný vyriešiť väčšinu problémov a naprogramovať nejaký kód, ktorý by mal fungovať. Ak sa Vám nedarí to naprogramovať aspoň funkčne, pomôže hľadať na Google. Skúste zadať názvy, ktoré podľa Vás charakterizujú, čo sa pokúšate spraviť. Ak sa Váš kód nedá ani preložiť(kompilovať), hľadajte na Googli text chyby. To isté, ak Vám vyhodí za behu tzv. Výnimku(Exception). Ak sa Vám ani napriek tomu nedarí kód rozchodiť, potom sa pýtajte na fóre ako napríklad vbnet.cz . Snažte sa pritom o presný a stručný popis toho, čo chcete spraviť, prečo to podľa Vás nefunguje, čo očakávate, že to bude robiť a uvedťe tie časti kódu, ktoré sú podľa Vás zle.

Samozrejme snažte sa programovať primerane Vaším znalostiam, takže nie hneď komplikované veci.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback