Praca s externymi subormi v projekte   zodpovězená otázka

VB.NET, WinForms, I/O operace

Ahoj takze znova ja.

Chcel by som sa spytat ako mam pracovat s externymi subormi v mojom projekte.

Priklad:

Vytvorim okno s richtextbox-om do ktoreho nacitam obsah suboru z disku... proste jednoducha napoveda pre moj program. Nechcem vytvarat zbytocne okna a v nich vytvarat richtextbox-y a do richtextbox-ov vkladat text kedze tych okien s napovedami bude viacej.

Preto som napisal jednoduchy kod ktory mi to vsetko spravy automaticky. Tu je

 Dim newForm As New Windows.Forms.Form
        Dim rtb2 As New RichTextBox

        newForm.FormBorderStyle = Windows.Forms.FormBorderStyle.Fixed3D
        newForm.Controls.Add(rtb2)
        newForm.Height = 600
        newForm.Width = 400
        newForm.Text = "Pomoc k cyklu"

        rtb2.Dock = DockStyle.Fill
        rtb2.Multiline = True
        rtb2.ScrollBars = ScrollBars.Vertical
        rtb2.ReadOnly = True

        Dim tx As String
        Dim sr As New System.IO.StreamReader("c:\Documents and Settings\Dodo_MT\My Documents\Q200.txt", System.Text.Encoding.Unicode)      'vstupny subor
        
        tx = Trim("c:\Documents and Settings\Dodo_MT\My Documents\Q200.txt")
        sr = File.OpenText(tx)
        rtb2.Text = sr.ReadToEnd
        sr.Close()
        rtb2.Tag = tx
        newForm.Show()

Vsetko funguje tak ako ma text sa nacita do vytvoreneho okna. Len ako to bude ked budem chciet sirit moj program na viac PC ako mam vytvorit nejaku stromovu strukturu ze ked si to nainstalujem aj do ineho adresara ako mam ja uvedeny tak mi moje subory bude nacitavat dobre?

Skusal som pridat do mojho projektu v Solution Explorery txt subor aj som si donho vlozil text napovedy ktory chcem aby sa mi zobrazoval len neviem ako mam ten textak pouzit... Mam vypisat zase jeho cestu do mojho kodu??

Nieco podobne riesim aj s obrazkami mam ich v mojom projekte asi 50 a neviem ako ich spravovat. Podla mna by ich bolo najlepsie spravovat z nejakeho adresaru na disku...

Dufam ze som to napisal zrozumitelne

Zavsetky rady dakujem

dodo

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

Pokud si dáte soubory do Solution Exploreru, je příhodno nastavit jim v Properties vlastnost CopyToOutputDirectory na CopyAlways. Pak soubor v kódu získáte tak, že napíšete:

dim s1 as string = "myfile.txt"
dim s2 as string = io.path.combine(my.application.info.directorypath, "myfile.txt")

Obojí funguje, jinak k tomu adresáři na disku: hrozí to, že se User bude šťourat v těch Vašich souborech nebo je přímo nahrazovat, a navíc, když je smaže, musíte to ještě ošetřit. Když je máte v projektu, máte jistotu že budou existovat (pokud není aplikace na CD, pak těžko vytvářet soubory).

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

Jasne chapem.

Este by som sa spytal ze si nemozem tie moje txt a jpg subory zasifrovat do nejakych "pomocnych" suborov. Tak ze by to moj program natahoval z nich...

Ked to vsetko dam do jedneho tak moj program bude mat 30MB a bude mat jeden exe subor?! to sa mi moc nepaci..

Este vas poprosim ako zapisat tie vase premenne? Skusal som ich vymenit iba za tie moje ale nefunguje mi to a vyhodi mi chyby..

Dakujem

dodo

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

K tomu souboru, možná by šlo vymyslet nějaký šifrovací algoritmus, ale pokud jste začátečník, možná to není to nejlepší řešení. Ještě by šlo soubory kódovat do BASE64, jenže pak docela razantně přiberou (tipuji, že ve Vašem případě tak na 45MB).

A ty proměnné, do těch proměnných se plní cesty k těm souborům. Proměnou můžete inicializovat buď přímo ve třídě:

Class MojeTrida
    Dim MujSoubor As String = IO.Path.Combine(My.Application.StartupPath, "MujTextak.txt")
    'a nebo pak v metodě/fci:
    Private Sub MojeMetoda() Handles Me.Load
        Dim MujSoubor As String = IO.Path.Combine(My.Application.StartupPath, "MujTextak.txt")
        MsgBox(MujSoubor)
    End Sub
End Class

Doufám že jsem to vyjádřil srozumitelně. Na závěř mi dovolte doporučit Vám ty soubory přibalit k programu, protože když se Vám uživatel bude šťourat v důležitých souborech, program v tom pak bude mít hokej a možná nebude správně pracovat. Znám takové uživatele, sám jsem jedním z nich, takže tak :)

Přeji hezký den

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

No akosi mi to nefunguje... ale pokusim sa este nieco s tym spravit...

Nieco sa mu nepaci ohladom "My.Application.StartupPath" neviem co ale skusim na to prist ak nie ostavam u mojej starej metody ktora nie je nic moc..

Dakujem

dodo

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

Nevím, kde jsem přišel na My.Application.StartupPath, a omlouvám se za to matení.

Tohle by mělo jít:

IO.Path.Combine(My.Application.Info.DirectoryPath, "TextFile1.txt")

Ale nezapomeňte ve vlastnostech souboru dát CopyToOutputDirectory na CopyAlways.

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

Este som to neskusal len sa chcem spytat ze ci tam treba pisat celu cestu k suboru ktory mam vlozeny v Solution Explorery alebo staci len nazov suboru zo Solut. Exploreru?

Dakujem

dodo

EDIT:

Tazke vyskusal som potrapil som sa a uz mi to bezi tak ako ma :)

Velmi pekne dakujem za ochotu.

Moj vysledny kod:

        Dim tx As String
        Dim mojSubor As String = IO.Path.Combine(My.Application.Info.DirectoryPath, "Napoveda pre cykly/Vrtanie - Zavitovanie/Q200.txt")
        Dim sr As New System.IO.StreamReader(mojSubor)

        tx = Trim(mojSubor)
        sr = File.OpenText(tx)
        rtb2.Text = sr.ReadToEnd
        sr.Close()
        rtb2.Tag = tx
        newForm.Show()

dodo

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

Tak, jsem rád, že Vám vše funguje. Mimochodem, kód by měl fungovat i s relativně zadanou cestnou, tzn:

Dim mojSubor As String = "Napoveda pre cykly/Vrtanie - Zavitovanie/Q200.txt"

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

Aha dakujem vyskusam.

PS: funguje este raz dik

dodo

nahlásit spamnahlásit spam 0 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