Avatar billede Kodelærlingen Juniormester
06. december 2016 - 11:30 Der er 16 kommentarer og
1 løsning

Zipfil - problemer med æøå

Hej
Når jeg kører nedestående kode, så er der problemer med filnavne som indeholder æøå. F.eks. bliver Følgebrev til F+©lgebrev.

Jeg har kørt koden på to maskiner - en hvor der er problemer med æøå og en, hvor der ingen problemer er med filnavnet. Hvad skal jeg gøre for at kunne køre koden uden problemer med æøå?

Imports System.IO.Compression
   
Public Sub zip()
        Dim startPath As String = "c:\test\"
        Dim zipPath As String = "c:\test\result.zip"
        Dim extractPath As String = "c:\test\extract"

        ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True)
        ZipFile.ExtractToDirectory(zipPath, extractPath)
    End Sub
Avatar billede arne_v Ekspert
06. december 2016 - 17:49 #1
Gaet:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.Default)

eller:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, new Encoding(1252))
Avatar billede Kodelærlingen Juniormester
06. december 2016 - 18:45 #2
Den skriver stadig ikke filnavne korrekt, når jeg ændre min kode til:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.Default)


Det andet kode eksempel får jeg denne meddelelse:
'New' cannot be used on a class that is declared 'MustInherit'.

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, new Encoding(1252))
Avatar billede arne_v Ekspert
06. december 2016 - 19:13 #3
Ah - det er ikke:

new Encoding(1252)

men:

Encoding.GetEncoding(1252)
Avatar billede arne_v Ekspert
06. december 2016 - 19:42 #4
Men hvis ikke Default virker saa tror jeg heller ikke at 1252 virker.
Avatar billede Kodelærlingen Juniormester
06. december 2016 - 19:56 #5
Følgebrev bliver nu skrevet som F°lgebrev. Det ikke om det kan sige dig noget?

Jeg kan ikke gennemskue, hvor det driller med æøå. Det undre mig, som jeg skrev som det første, at der er et problem med æøå på en computer, men ikke den anden.
Avatar billede arne_v Ekspert
06. december 2016 - 20:07 #6
Hm.

Kigger du i DOS prompt eller i windows stifinder?
Avatar billede Kodelærlingen Juniormester
06. december 2016 - 20:43 #7
Helt almindelig mappe-visning (windows stifinder)
Avatar billede arne_v Ekspert
06. december 2016 - 21:00 #8
Hmm.

Saa bliver det jo rent gaet.

Proev:

Encoding.GetEncoding(850)

og:

Encoding.UTF8

og se om en af dem virker.
Avatar billede Kodelærlingen Juniormester
06. december 2016 - 21:26 #9
Det ser ud til at virke med Encoding.GetEncoding(850) :-)

Jeg tester lige videre i morgen.
Avatar billede arne_v Ekspert
07. december 2016 - 03:42 #10
Hvordan virker:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.UTF8)

med:

ZipFile.ExtractToDirectory(zipPath, extractPath, Encoding.UTF8)

?
Avatar billede Kodelærlingen Juniormester
07. december 2016 - 09:25 #11
Filnavne fejler med disse:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.UTF8)

ZipFile.ExtractToDirectory(zipPath, extractPath, Encoding.UTF8)

Det virker fint med nedestående:

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.GetEncoding(850))

ZipFile.ExtractToDirectory(zipPath, extractPath, Encoding.GetEncoding(850))
Avatar billede arne_v Ekspert
07. december 2016 - 15:40 #12
Saa maa det vel blive 850.

Selvom det er noget gammelt DOS juks.
Avatar billede Kodelærlingen Juniormester
08. december 2016 - 09:15 #13
Jeg kører videre med 850.

Det som undre mig mest er, at det virkede fint på en maskine med filnavnene, men volder problemer på en anden maskine. Det burde vel køre fint med UTF8 (helt generelt)?
Avatar billede arne_v Ekspert
08. december 2016 - 21:52 #14
Det virker logisk at hvis man bruger samme Encoding til ind og ud saa burde det virke.

Men der maa vaere en forskel paa de to maskiner hvor koden dybt nede goer noget forskelligt.

Formentligt udfra et oenske om at vaere "DOS kompatibel".
Avatar billede Kodelærlingen Juniormester
09. december 2016 - 13:01 #15
Koden zipper og unzipper filerne. Selvom jeg får en fejlmeddelelse om, at en anden proces ikke kan få angang til filen, så kører den alligevel processen igennem. Hvad kan jeg gøre for, at jeg ikke får fejlmeddelelsen?

  Public Sub zip()
        Dim startPath As String = "c:\test2\"
        Dim zipPath As String = "c:\test2\result.zip"
        Dim extractPath As String = "c:\test2\extract"

        If System.IO.File.Exists(zipPath) Then
            deleteFile(zipPath)
        End If

        Try
            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Optimal, True, Encoding.GetEncoding(850))
        Catch ex As Exception
            TextBox3.Text += ex.ToString
        End Try

        'Try
        'ZipFile.ExtractToDirectory(zipPath, extractPath, Encoding.GetEncoding(850))
        'Catch ex As Exception
        'TextBox3.Text += ex.ToString
        'End Try

    End Sub


System.IO.IOException: Processen kan ikke få adgang til filen 'c:\test2\result.zip', fordi den bliver brugt af en anden proces.
  ved System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
  ved System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
  ved System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
  ved System.IO.Compression.ZipFileExtensions.DoCreateEntryFromFile(ZipArchive destination, String sourceFileName, String entryName, Nullable`1 compressionLevel)
  ved System.IO.Compression.ZipFile.DoCreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, Nullable`1 compressionLevel, Boolean includeBaseDirectory, Encoding entryNameEncoding)
  ved System.IO.Compression.ZipFile.CreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, CompressionLevel compressionLevel, Boolean includeBaseDirectory, Encoding entryNameEncoding)
Avatar billede arne_v Ekspert
09. december 2016 - 13:32 #16
Det ser ud som om du faar en fejl paa den zip fil du skriver fordi den ligger i dir hvor du zipper fra.

Det nemmeste var nok bare at smide den i et andet dir.
Avatar billede Kodelærlingen Juniormester
09. december 2016 - 14:15 #17
Er prøvet og nu virker det hele som det skal:-) Tusind tak for hjælpen. God weekend
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester