Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Directory.Move

crapper_ce4you (117)|11.8.2006 13:37
Opět zákys v Compact Framework 2
Nejlepší bude ukázat problémový kód, takže třeba:

Imports System
Imports System.IO

Public Class Form1
Dim Adresar1 As String = "\Adresar1"
Dim Adresar2 As String = "\Storage Card\Adresar2"

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
If Directory.Exists(Adresar1) = True and Directory.Exists(Adresar2) = True Then
Directory.Move(Adresar1, Adresar2)
Directory.Delete(Adresar1)
Else
Directory.CreateDirectory(Adresar1)
Directory.CreateDirectory(Adresar2)
End If
End Sub
End Class

To Move a Delete hodí hlášku:
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll :?:
beecher (9270)|11.8.2006 13:52
IOException
An attempt was made to move a directory to a different volume.

-or-

destDirName already exists.

-or-

The sourceDirName and destDirName parameters refer to the same file or directory.

Tzn. Pokud se to presouvam mezi ruznymi "disky", tak je to asi nutne nejdrive zkopirovat a pak smazat...
crapper_ce4you (117)|11.8.2006 14:06
Jasně, hmm
Takže nemůžu nic přesunout na Storage Card, páč už existuje. V rámci root přístroje to běhá. Ale je to dost divné, jako že nejde přesunout Adresar1 z rootu do jiného adresáře na Storage Card, aby se stal jeho podadresářem.
beecher (9270)|11.8.2006 14:13
A to kopirovani jsi zkousel?
crapper_ce4you (117)|11.8.2006 14:31
Kopírování neumím :-(
Co jsem tedy postřehl :-) Directory.Delete lze použít takto:

Dim Adresar1 As String = "\Adresar1"
Dim Adresar2 As String = "\Storage Card\Adresar2"
Private Sub ......
If Directory.Exists(Adresar1) = True And Directory.Exists(Adresar2) = True Then

Directory.Delete(Adresar1)
Else
Directory.CreateDirectory(Adresar1)
Directory.CreateDirectory(Adresar2)

End If
End Sub

Pokud do Adresar1 dám podadresář test "\Adresar1\test" pak musím mazat postupně:
Directory.Delete(Adresar1 + "\test")
Directory.Delete(Adresar1)

Directory.Move mi tedy stejně tak jde pouze v rámci rootu a musí být ta složka prázdná. Tedy provede to pouze vytvoření nové složky podle parametru destDirName a smáznutí složky sourceDirName. Grrrr
Přeci pokud chci přesunout složku A se všemi podsložkami a soubory uvnitř z Bodu A do bodu B, nebudu dělat výpis celé struktury danné složky a pojednom to automatizovaně zpracovávat (i přes to že se to tak nakonec děje).