Unity IOException: Cannot create 'path' because a file with the same name already exists.?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wäre es ein Problem, vor dem Entpacken die bereits vorhandene Datei zu löschen, sofern vorhanden? Ich meine sowas wie:

if (File.Exists(path))
{
  File.Delete(path)
}
AbgeNickt411 
Fragesteller
 14.06.2020, 10:20

Der Soll ja eigentlich keinen Ordner erstellen sondern das Update installieren in dem er die Spieldateien überschreibt

0
MagicalGrill  14.06.2020, 10:24
@AbgeNickt411

Und anscheinend hat er damit ein Problem, weil die Spieldateien bereits existieren. Ich kenne deinen Code dazu nicht, aber ich würde annehmen, dass irgendwo entweder direkt oder versteckt versucht wird, so ein directory anzulegen.

Verwendest du die ZipFile.ExtractToDirectory-Methode?

0
AbgeNickt411 
Fragesteller
 14.06.2020, 10:26
@MagicalGrill

Ja diese Methode verwende ich. Nein ich habei n der ZIP erstmal ein test textdokument was es so noch nicht existiert

0
AbgeNickt411 
Fragesteller
 14.06.2020, 10:27
@MagicalGrill

Naja jetzt steht da: UnauthorizedAccessException: "Access to the path 'C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded' is denied."
Soll ich dir mal die klasse schicken?

0
MagicalGrill  14.06.2020, 10:32
@AbgeNickt411

Zeile 84: Kannst du es mal mit

ZipFile.ExtractToDirectory(zipLoc, path.Replace(' ', '_'), true);

probieren?

EDIT: Syntax fixed

0
AbgeNickt411 
Fragesteller
 14.06.2020, 10:34
@MagicalGrill

"Argument 3: Konvertierung von "bool" in "System.Text.Encoding" nicht möglich."

0
MagicalGrill  14.06.2020, 10:41
@AbgeNickt411

Unabhängig davon steht in der Dokumentation:

"Das angegebene Verzeichnis darf nicht vorhanden sein. Die-Methode erstellt das angegebene Verzeichnis und alle Unterverzeichnisse."

Also solltest du für den Inhalt deiner Zip lieber nen eigenen Ordner anlegen und diesen vor Aufruf der Methode löschen, sofern er existiert.

0
MagicalGrill  14.06.2020, 10:46
@AbgeNickt411

Um zu checken, ob es am existierenden Verzeichnis liegt, vielleicht testweise das hier?

public void unzip()
    {
        string path = Directory.GetCurrentDirectory() + @"\TestFolder";
        ZipFile.ExtractToDirectory(zipLoc, path.Replace(' ', '_'));
        UnityEngine.Debug.Log("Unziped to: " + path);
        //clean();
    }

Wenn das der Fehler ist, sollte obiger Code exakt einmal funktionieren.

0
MagicalGrill  14.06.2020, 10:56
@AbgeNickt411

Ok, ne kleine Idee:

public void unzip()
    {
      string newPath = path.Replace(' ', '_') + @"\newFile.txt";
      string path = Directory.GetCurrentDirectory() + @"\TestFolder";
      ZipFile.ExtractToDirectory(zipLoc, newPath);
      UnityEngine.Debug.Log("Unziped to: " + path);
      //clean();
    }

Der Gedanke ist, dass du vielleicht versuchst, ein Verzeichnis durch eine Datei zu ersetzen, was nicht erlaubt ist. Statt ".txt" solltest du natürlich deine eigene Endung benutzen

0
AbgeNickt411 
Fragesteller
 14.06.2020, 10:58
@MagicalGrill

Ok dann kriege ich diesen fehler: UnauthorizedAccessException: Access to the path 'C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded' is denied.

0
MagicalGrill  14.06.2020, 11:03
@AbgeNickt411

How annoying :'D Hast du vielleicht einfach keine Schreibrechte in dem Ordner? Versuch einfach mal eiskalt, stattdessen in den Pfad C:\temp zu entpacken

0
MagicalGrill  14.06.2020, 11:07
@AbgeNickt411

What? Die Zeile sollte ungefähr so aussehen:

      ZipFile.ExtractToDirectory(zipLoc, @"C:\temp");
0
MagicalGrill  14.06.2020, 11:12
@AbgeNickt411

Ok, das würde ja bedeuten, dass er entweder mit unzip fertig ist oder gar nicht erst damit begonnen hat, oder? Kannst du mal gucken, ob in C:\temp jetzt dein .zip entpackt wurde?

0
AbgeNickt411 
Fragesteller
 14.06.2020, 11:15
@MagicalGrill

Ja und jetzt gerade auch in der downloade method. Aber da kam jetzt dieser fehler:

NullReferenceException: Object reference not set to an instance of an objectAutoUpdater.downloadUpdate () (at Assets/War Confirmed/Scripts/AutoUpdater.cs:71)

0
MagicalGrill  14.06.2020, 11:17
@AbgeNickt411

Das ist höchst seltsam, denn wenn du den Pfad nur in der unzip-Methode veränderst, sollte sich am Ablauf bis dahin doch gar nichts ändern.

0
MagicalGrill  14.06.2020, 11:23
@AbgeNickt411

Oh, moment, machen wir nochmal alle Änderungen rückgängig :'D

Du downloadest die Zip-Datei in irgendein Directory und versuchst dann, den Inhalt in dasselbe Directory zu entpacken?

0
MagicalGrill  14.06.2020, 11:47
@AbgeNickt411

Ich hab noch ne Idee. Schau mal nach, was eigentlich in zipLoc drinsteht:

    public void unzip()
    {
        //string path = Directory.GetCurrentDirectory();
        //ZipFile.ExtractToDirectory(zipLoc, path.Replace(' ', '_'));
        //UnityEngine.Debug.Log("Unziped to: " + path);
        //clean();
        UnityEngine.Debug.Log("ZipLoc: " + zipLoc);
    }

Wenn ich das richtig sehe, steht da nur der Pfad, nicht aber explizit die zip-Datei. In diesem Fall müsstest du zipLoc entsprechend ändern oder erweitern:

    public void unzip()
    {
        string path = Directory.GetCurrentDirectory().Replace(' ','_');
        ZipFile.ExtractToDirectory(zipLoc + @"\filename.zip", path);
        UnityEngine.Debug.Log("Unziped to: " + path);
        //clean();
    }

Natürlich musst du "filename.zip" durch den echten Namen ersetzen.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 13:06
@MagicalGrill

.... die datei hat sich wohl erstellt ich habe nur immer im falschen Ordner der aber auch so heißt geguckt. Aber anscheinend kann er nicht Dateien die schon existieren überschreiben wie macht ich das?

0
AbgeNickt411 
Fragesteller
 14.06.2020, 13:24
@MagicalGrill

Obwohl hier ist noch ein Fehler: NullReferenceException: Object reference not set to an instance of an object

0
MagicalGrill  14.06.2020, 14:36
@AbgeNickt411
Aber anscheinend kann er nicht Dateien die schon existieren überschreiben wie macht ich das?

Vorher prüfen, ob die Datei schon existiert und gegebenenfalls vorher löschen?

NullReferenceException heißt, dass er irgendwo ein Objekt verwenden muss, das es gar nicht gibt. Je nachdem an welcher Stelle die auftritt, kann das alle möglichen Ursachen haben.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 14:45
@MagicalGrill

Wie auch immer jetzt ist es wieder dieser fehler: UnauthorizedAccessException: Access to the path 'C:\temp\fiel' is denied.

0
MagicalGrill  14.06.2020, 14:46
@AbgeNickt411

Hast du schon geguckt, was genau in zipLoc drinsteht? (vgl. meine Antwort von vor 3 Stunden).

0
AbgeNickt411 
Fragesteller
 14.06.2020, 14:50
@MagicalGrill

Ok ich habs mal gestartet wenn ich auf download klicke dann steht da "Zip was downloaded to: C:\Temp" das und dann kommt der fehler das heißt er schafft es nichtmal die datei zu downloaden sonst würde danach stehen: "Download Complete"

0
MagicalGrill  14.06.2020, 14:52
@AbgeNickt411

Vergessen wir die Geschichte mit C:\Temp, ich glaube der Fehler liegt woanders.

Stell nochmal den Code wieder her, den du mir ursprünglich geschickt hast (https://paste.ofcode.org/HJMikFjVEYzyJ5Z37i3iCL). Bei der Version schafft er es ja wenigstens, die .zip zu downloaden, wenn ich das richtig verstanden habe.

In dieser Version logge mal, was in zipLoc drinsteht.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 14:55
@MagicalGrill

Ok in der Console steht:
"Downloade to C:\Users\Benutzer\Workspaces\Unity\War Reloaded...." Danach steht da:
ArgumentException: The specified path is not of a legal form (empty).

0
MagicalGrill  14.06.2020, 14:57
@AbgeNickt411

Das ist doch vorher gar nicht passiert, oder? Bist du sicher, dass alles genau so ist, wie es war, bevor wir was dran geändert haben?

0
MagicalGrill  14.06.2020, 15:02
@AbgeNickt411

Dann müssen wir wohl nachgucken, was mit den Argumenten passiert ist...

Logge mal in der download-methode, was in downloadURL und in path drinsteht.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:03
@MagicalGrill

wie den path hab ich doch gelloged und dir url weiß ich auswendig oder hab ich

da jetzt was falsch verstanden?

0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:21
@MagicalGrill

OMG kein wunder irgendwie geht die URL nicht: "Downloade from to C:\Users\Benutzer\Dekstop\Workspaces\Unity\War Reloaded...

0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:24
@AbgeNickt411

Ok solange wie Pastebin offline ist können wir es leider nicht testen

0
MagicalGrill  14.06.2020, 15:30
@AbgeNickt411

Ärgerlich, aber das hält uns ja nicht davon ab, zu denken :D

Wenn ich das richtig verstanden habe, liefert

Directory.GetCurrentDirectory();

die Location C:\Users\Benutzer\Dekstop\Workspaces\Unity\War Reloaded zurück.

Und du setz zipLoc auf eben diesen string.

Ich denke, das Problem bei ExtractToDirectory(zipLoc, ...) ist, dass zipLoc nicht explizit den Pfad der zip-Datei angibt, sondern nur das Verzeichnis, in dem die zip-Datei zu finden ist. Meiner Ansicht nach müsstest du hier stattdessen

ExtractToDirectory(zipLoc + @"\filename.zip", ...) verwenden.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:32
@MagicalGrill

Warte neuigkeiten aus den logs:
1 nachicht:
"Downloade from https://lens-support.de/Files/WarConfirmed/WarConfirmed.zip to C:\Users\Finn\Desktop\Workspaces\Unity\War Reloaded..."

2 nachicht:
"Downloaded to: C:\Users\Finn\Desktop\Workspaces\Unity\War Reloaded"

3 Nachicht:
"Unzip from C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded to C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded..."

4 Nachicht:

"UnauthorizedAccessException: Access to the path 'C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded' is denied.

0
MagicalGrill  14.06.2020, 15:34
@AbgeNickt411

Ok, probiere es jetzt in Zeile 88 mit:

ZipFile.ExtractToDirectory(zipLoc + @"\WarConfirmed.zip", path.Replace(' ', '_'));
0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:37
@MagicalGrill

er schafft es zum unzip und dann kommt wieder:
"FileNotFoundException: Could not find file C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded\WarConfirmed.zip"

Und er sagt bei mir das das Update neu währe obwohl beide versionen gleich sind also 1.0 xD und wie kann ich die aktuellste version aus er PlayerInfo auslesen?

0
MagicalGrill  14.06.2020, 15:39
@AbgeNickt411

Liegt das daran, dass du die Leerzeichen ersetzt hast? mach mal vor Zeile 88

zipLoc = zipLoc.Replace(' ', '_');
0
MagicalGrill  14.06.2020, 15:43
@AbgeNickt411

fml... Aber die Änderung mit

ZipFile.ExtractToDirectory(zipLoc + @"\WarConfirmed.zip", path.Replace(' ', '_'));

Hast du drin gelassen, oder?

0
MagicalGrill  14.06.2020, 15:47
@AbgeNickt411

Ok, der Übersichtlichkeit zuliebe:

Entferne mal alle Replaces. und dann ersetze Zeile 71 und 72 durch:

path = Directory.GetCurrentDirectory().Replace(' ', '_');
zipLoc = Directory.GetCurrentDirectory().Replace(' ', '_');
0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:51
@MagicalGrill

Ok bis zu unzip message geht es danach kommt das:
DirectoryNotFoundException: Could not find a part of the path "C:\Users\Benutzer\Desktop\Workspaces\Unity\War_Reloaded\WarConfirmed.zip".

0
MagicalGrill  14.06.2020, 15:52
@AbgeNickt411

Gut, das ist ne Neuerung :D Schau mal manuell in C:\Users\Benutzer... nach, was exakt fehlt.

0
MagicalGrill  14.06.2020, 15:55
@AbgeNickt411

Das ist natürlich ein Problem :D

Darf ich fragen, wieso genau du die Leerzeichen eigentlich durch Unterstriche ersetzen musst?

0
MagicalGrill  14.06.2020, 15:57
@AbgeNickt411

Naja, besser wäre es, wenn deine Ordnernamen überhaupt keine Leerzeichen hätten...

Unabhängig davon: Probier die Replaces einfach mal alle wegzulassen.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 15:59
@MagicalGrill

Jeztt probiert er es zu downloaden bricht ab und dieser fehler erscheint:
UnauthorizedAccessException: Access to the path 'C:\Users\Finn\Desktop\Workspaces\Unity\War Reloaded' is denied.

0
MagicalGrill  14.06.2020, 16:03
@AbgeNickt411

Vielleicht bei DownloadFile stattdessen folgendes?

client.DownloadFile(downloadURL, zipLoc + @"\WarConfirmed.zip");
0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:06
@MagicalGrill

Perfekt er kann jetzt alles entpacken und downloaden aber löschen kanne rdie nicht grund: UnauthorizedAccessException: "C:\Users\Benutzer\Desktop\Workspaces\Unity\War Reloaded is a directory"

0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:07
@MagicalGrill

achso er kanne s nicht löschen weil ich @"\WarConfirmed.zip" vergessen habe

1
AbgeNickt411 
Fragesteller
 14.06.2020, 16:08
@MagicalGrill

Ok aber wie kann ich machen das er die Sachen auch überschrieben kan

0
MagicalGrill  14.06.2020, 16:13
@AbgeNickt411

Eigentlich sollte das halt mit

ZipFile.ExtractToDirectory(zipLoc + @"\WarConfirmed.zip", path, true);

funktionieren... Aber bei dir kennt er die Überlagerung ja nicht, richtig?

Ansonsten kannst du wie gesagt mal versuchen, den file zu löschen, falls er schon vorhanden ist.

0
MagicalGrill  14.06.2020, 16:18
@AbgeNickt411

Normalerweise werden Programme automatisch beendet, wenn es keine Anweisung mehr gibt, die sie ausführen können. Ansonsten kannst du natürlich mal versuchen, es mit Application.Quit() oder so zu forcieren.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:19
@MagicalGrill

Ok noch eins warum wird bei mir new version avaible angezeigt wenn es die aktuellste version ist?

0
MagicalGrill  14.06.2020, 16:25
@AbgeNickt411

Ich hab keine Ahnung, woher CurVersion und latestVersion kommen... Von daher kann ich dir das auch nicht wirklich beantworten ;)

Im Moment sehe ich auch gar nicht, wo CurVersion überhaupt mit nem Wert belegt wird.

0
MagicalGrill  14.06.2020, 16:28
@AbgeNickt411

Ok, das kann ich ja nun nicht riechen :P

Schau mal nach, ob in einer der beiden Versionen ein unsichtbares Sonderzeichen oder ein Leerzeichen oder so auftaucht, sodass die Versionen zwar gleich aussehen, aber de facto unterschiedliche strings sind.

0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:34
@MagicalGrill

Schön währe es wenn es auch keine fehler geben könnte "string CurVersion = PlayerSettings.bundleVersion.ToString();"

0
MagicalGrill  14.06.2020, 16:36
@AbgeNickt411

Wofür brauchst du das ToString()? Ist bundleVersion nicht eh schon ein string?

Und von welchen Fehlern sprichst du?

0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:37
@MagicalGrill

ne ich wusste nicht das man es in der start methode machen muss bin gleich wieder on

0
AbgeNickt411 
Fragesteller
 14.06.2020, 16:49
@MagicalGrill

Hast du Discord oder so? So kannst du mir dann besser helfen. Naja aber weißt du eine Lösung wegen dem Update das es dort immer angezeigt wird?

0
MagicalGrill  14.06.2020, 17:04
@AbgeNickt411

Ich hab ehrlich gesagt keine Ahnung, was bei den Updates schiefgeht. Du kannst mal prüfen, ob er ins "if" oder ins "else" geht (also ob beim Vergleich was schief läuft oder ob der Fehler woanders liegt).

Leider hab ich auch gar nicht mehr übermäßig viel Zeit

0
AbgeNickt411 
Fragesteller
 14.06.2020, 17:06
@MagicalGrill

Alles gefixt ich muss leider pastebin nehmen und kann leider nicht meine server nehmen

0

Packe die ZIP in ein neues, leeres Verzeichnis aus. Im ZIP gibt es einen Ordner, der genauso heisst wie eine bereits vorhandene Datei, daher die Fehlermeldung, das er das nicht auspacken kann.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin
AbgeNickt411 
Fragesteller
 14.06.2020, 09:59

In der ZIP ist nur ein Text Dokument. Im neuen Ordner? Nein schließlich soll er ja später die Spieldateien überschreiben und sonst startet das game ja nicht das neue Update.

0