Avatar
RainbowShaggy:

Zdravím potřebuji poradit. Při zjištění jestli složka existuje vykoná příkaz try aby složku přesunul někam jinam. Pokud ale neexistuje tato složka měl by se vykonat příkaz catch což nebude nic čili nic se nestane a script by měl pokračovat dále. Jenže co když složka neexistuje. Pak se to zasekne a já si nevím jak dál rady aby to prostě přeskočilo to, že složka neexistuje a aby to vykonalo další přesunutí.

Díky moc za všechny odpovědi.

 
Odpovědět 4.2.2013 0:12
Avatar
Зайчик
Člen
Avatar
Odpovídá na RainbowShaggy
Зайчик:

to nedělej přes try catch mg :D udělej to jednoduše takhle

using System.IO;
if(Directory.Exists(Path))
    Directory.Copy nebo co si to chtěl
else
    // tady si nic nechtěl tak tam prostě to else nebudeš dávat vůbec :)
Nahoru Odpovědět 4.2.2013 0:18
Коммунизм для нашего будущего!
Avatar
Odpovídá na Зайчик
RainbowShaggy:

A proč ne přes try a catch?

 
Nahoru Odpovědět 4.2.2013 0:23
Avatar
Зайчик
Člen
Avatar
Odpovídá na RainbowShaggy
Зайчик:

no protože tam budeš mít catch, kterej vůbec nevyužiješ a vsadím se že ta moje verze se provede o malilinko rychleji x)

Nahoru Odpovědět 4.2.2013 0:29
Коммунизм для нашего будущего!
Avatar
RainbowShaggy:

Takže i když jsem to udělal jak jsi řekl:

if (Directory.Exists(ahoj + "slozka"))
                  {
                      toolStripStatusLabel1.Text = "Přesouvám složku slozka do složky tajnaslozka!";
                      ProgressBar1.Value = 25;
                      Directory.Move(ahoj + "slozka", mejse + "tajnaslozka" + "\\tajnaslozka");
                  }
                  else
                  {

                  }

Tak to nefunguje :(

 
Nahoru Odpovědět 4.2.2013 0:38
Avatar
Odpovídá na RainbowShaggy
Luboš Běhounek (Satik):

Na spojování částí cesty používej Path.Combine(), vyřeší to za tebe problémy s chybějícími/e­xistujícími lomítky.

Prázdnou else větev nepoužívej, prostě ji úplně vynech.

Nahoru Odpovědět 4.2.2013 0:45
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
RainbowShaggy:

Prázdnou else větev nepoužívej, prostě ji úplně vynech:
To jsem měl jako první ještě než jsem zkusil try a catch prostě ifka šly za sebou a stejně se to pořád zaseklo u toho prvního.

Path.Combine() to je co? Omlouvám se ale nejsem v C# tak skvělý. Používám jen to co potřebuji. Zbytek je pro mě zatím neznámá.

 
Nahoru Odpovědět 4.2.2013 0:50
Avatar
Odpovídá na RainbowShaggy
Luboš Běhounek (Satik):

http://msdn.microsoft.com/…combine.aspx

"Na spojování částí cesty používej Path.Combine()"

Spojuje to části cesty.

String cesta = Path.Combine("C:\Hry", "MojeSuperHra", "soubor.txt")

obsah cesta pak bude "C:\Hry\MojeSu­perHra\soubor­.txt"

Nahoru Odpovědět 4.2.2013 0:55
:)
Avatar
Odpovídá na RainbowShaggy
Luboš Běhounek (Satik):

Nevím jaký :)
Hoď si do té funkce na začátek breakpoint a krokuj (klávesa F9 defaultně) a uvidíš, kudy program teče.

Nahoru Odpovědět 4.2.2013 2:26
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na RainbowShaggy
Kit:

Mělo by to přece fungovat úplně jednoduše:

try {
   Directory.Move(ahoj + "slozka", mejse + "tajnaslozka" + "\\tajnaslozka");
} catch {
   // Chyba při přesunu
}
Nahoru Odpovědět 4.2.2013 8:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Luboš Běhounek (Satik)
RainbowShaggy:

On prostě vykoná if zjistí pokud tam ta složka je a pokud není tak stojí a nepokračuje dále což je dost divné.

 
Nahoru Odpovědět 4.2.2013 9:11
Avatar
Odpovídá na Kit
RainbowShaggy:

Tohle byla druhá možnost, nefungovalo.

 
Nahoru Odpovědět 4.2.2013 9:11
Avatar
Зайчик
Člen
Avatar
Odpovídá na RainbowShaggy
Зайчик:

pošli jsem celou část tvého kódu ať i víme proč se zasekne ;) přijde mi divný že to nefunguje :D

Nahoru Odpovědět 4.2.2013 9:26
Коммунизм для нашего будущего!
Avatar
RainbowShaggy:
if (Directory.Exists(slozka + "nejakaslozka"))
          {
              toolStripStatusLabel1.Text = "";
              const string message = "Byla nalezena složka do které se má něco ukládat. Mám ji odstranit?";
              const string caption = "Upozornění";
              var result = MessageBox.Show(message, caption,
                                           MessageBoxButtons.YesNoCancel,
                                           MessageBoxIcon.Error);
              if (result == DialogResult.Yes)
              {
                  Directory.Delete(slozka + "nejakaslozka");

                  toolStripStatusLabel1.Text = "Vytvářím složku nejakaslozka";
                  ProgressBar1.Value = 15;
                  Directory.CreateDirectory(slozka + "nejakaslozka");
                  toolStripStatusLabel1.Text = "Zjišťuji, zda existuje složka tajnaslozka...";
                  ProgressBar1.Value = 20;
                  if (Directory.Exists(slozka + "tajnaslozka"))
                  {
                      toolStripStatusLabel1.Text = "Přesouvám složku tajnaslozka do složky nejakaslozka!";
                      ProgressBar1.Value = 25;
                      Directory.Move(slozka + "tajnaslozka", slozka + nejakaslozka + "\\tajnaslozka");
                      toolStripStatusLabel1.Text = "Zjišťuji, zda existuje složka nejakajinaslozka...";
                      ProgressBar1.Value = 30;
                  }
                  else
                  {

                  }
                  if (Directory.Exists(slozka + "nejakajinaslozka"))
                  {
                      toolStripStatusLabel1.Text = "Přesouvám složku nejakajinaslozka do složky tajnaslozka!";
                      ProgressBar1.Value = 35;
                      Directory.Move(slozka + "nejakajinaslozka", slozka + nejakaslozka + "\\nejakajinaslozka");
                      toolStripStatusLabel1.Text = "Zjišťuji, zda existuje složka dalsislozka...";
                      ProgressBar1.Value = 40;
                  }
                  else
                  {

                  }
                  toolStripStatusLabel1.Text = "";
                  ProgressBar1.Value = 100;
                  const string message2 = "Operace byla úspěšně dokončena!";
                  const string caption2 = "Dokončeno!";
                  var result2 = MessageBox.Show(message2, caption2,
                      MessageBoxButtons.OK,
                      MessageBoxIcon.Information);
                  ProgressBar1.Value = 0;
              }


              else if (result == DialogResult.No)
              {
                  ProgressBar1.Value = 100;
                  const string message1 = "Bohužel nemůžeme vytvořit něco, pokud existuje složka do které se má něco ukládat.";
                  const string caption1 = "Chyba";
                  var result1 = MessageBox.Show(message1, caption1,
                                               MessageBoxButtons.OK,
                                               MessageBoxIcon.Error);
                  ProgressBar1.Value = 0;
              }
          }

Ty Path.Combine dodělám později, včera (vlastně dneska) se mi už do toho nechtělo.

Editováno 4.2.2013 9:46
 
Nahoru Odpovědět 4.2.2013 9:45
Avatar
Kit
Redaktor
Avatar
Odpovídá na RainbowShaggy
Kit:

Co si představuješ pod pojmem "nefungovalo"?

Nahoru Odpovědět 4.2.2013 9:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
RainbowShaggy:

Že to prostě pořád zjišťuje, ale když nezjistí tak nepokračuje dále. Je to zaseknuté pořád u toho zjišťování.

 
Nahoru Odpovědět 4.2.2013 9:48
Avatar
Kit
Redaktor
Avatar
Odpovídá na RainbowShaggy
Kit:

Jako že se program v tom místě zastaví a stojí? Musíš ten proces pak zabít?

Nahoru Odpovědět 4.2.2013 9:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
 
Nahoru Odpovědět 4.2.2013 9:52
Avatar
RainbowShaggy:

Pořád nikdo neví?

 
Nahoru Odpovědět 4.2.2013 12:23
Avatar
Kit
Redaktor
Avatar
Odpovídá na RainbowShaggy
Kit:

Asi to máš rozbité. Zkusil jsi restartovat?

Ten tvůj kód je tak divně napsaný, že se mi nechce v něm přehrabovat.

Nahoru Odpovědět 4.2.2013 12:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
RainbowShaggy:

Jo zkoušel, stejně to nefunguje.
Divně napsaný?

 
Nahoru Odpovědět 4.2.2013 13:10
Avatar
Kit
Redaktor
Avatar
Odpovídá na RainbowShaggy
Kit:

Připomíná mi to špagety. Metoda by neměla být delší, než asi 15 řádek, což silně překračuješ. Délka řádku by neměla překročit 80 znaků.

Nahoru Odpovědět 4.2.2013 13:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
RainbowShaggy:

Tak to buď rád, že jsem to tu nedal celé. To by ses asi musel zbláznit.
Jinak nikdo další neví proč?

 
Nahoru Odpovědět 4.2.2013 13:47
Avatar
Odpovídá na RainbowShaggy
Luboš Běhounek (Satik):

Krokuj, psal jsem ti to nahoře, tím zjistíš, na kterým řádku se to zasekne.

Nahoru Odpovědět 4.2.2013 13:52
:)
Avatar
RainbowShaggy:

Já jsem ... Jo ono to fungovalo od začátku, jen já jsem tam něco zblbnul. Díky moc za pomoc. Ještě jednou vás budu brzy potřebovat, ale v jiném příspěvku :)

 
Nahoru Odpovědět 4.2.2013 14:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 26 zpráv z 26.