[Errno 13] Permission denied: 'c: Errore copia file in c:/

di Naima il
7 risposte

Salve a tutti.
Sto scrivendo un programma che riceve in input un testo da cercare, una directory di partenza e una directory di output dove copia i file trovati (rispetto all'input dato).

Funziona bene in generale, però quando inserisco da console la directory destinazione pari a c:/ mi dà errore: qualche idea?

Per il resto funziona, ma inserendo c:/ lancia l'eccezione che copio al fondo del codice

GRAZIE

import fnmatch
import os
import shutil
from pathlib import Path

parola_da_cercare = input("Inserisci la parola da cercare")
directory_di_partenza = input("Inserisci la directory di partenza per la ricerca")
directory_di_output = input("Inserisci la directory di output")
# se si inserisce solo una parola e non un percorso completo, crea una directory nella cartella di esecuzione del programma

matches = []

# Controllo esistenza di directory di partenza. Se non esiste, il programma termina
if not os.path.exists(directory_di_partenza):
    print("Directory di partenza inesistente. Si prega di inserire un percorso valido.")
    exit()

# Controllo esistenza di directory di destinazione. Se non esiste, chiedo all'utente se vuole crearne una
if not os.path.exists(directory_di_output):
    crea_directory = input("Directory di destinazione inesistente. Vuoi crearne una (y/n)?")
    if crea_directory == "y":
        Path(directory_di_output).mkdir(exist_ok=True)
    else:
        exit()

#Controllo perfetti di scrittura sulla directory di output
if not os.access(directory_di_output, os.W_OK):
    print("Non hai i permessi di scrittura nella directory di output. Scegli una directory valida.")
    exit()

for root, dirnames, filenames in os.walk(directory_di_partenza):
    for filename in filenames:
        if parola_da_cercare in filename:
            matches.append(os.path.join(root, filename))
            if matches:
                print("File trovati:")
                for file_path in matches:
                    print(file_path)
                    #name, ext = os.path.splitext(file_path)
                    #print(name)
                    #print(ext)
                    #try:
                    shutil.copy2(file_path, directory_di_output)
                    #except shutil.SameFileError as e:
                     #   sovrascrivi = input("Il file esiste già nella directory di destinazione")
                    #except shutil.Error as e:
                     #   print(f"shutil.Error durante la copia del file {file_path}: {e}")
                    #except Exception as e:
                     #   print(f"Exception durante la copia del file {file_path}: {e}")
            else:
                print(f"Nessun file trovato con '{parola_da_cercare}'.")

Traceback (most recent call last):
 File "C:\Users\Lucy\PycharmProjects\pythonProject\Etivity1.py", line 43, in <module>
   shutil.copy2(file_path, directory_di_output)
 File "C:\Users\Lucy\AppData\Local\Programs\Python\Python311\Lib\shutil.py", line 436, in copy2
   copyfile(src, dst, follow_symlinks=follow_symlinks)
 File "C:\Users\Lucy\AppData\Local\Programs\Python\Python311\Lib\shutil.py", line 258, in copyfile
   with open(dst, 'wb') as fdst:
        ^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: 'c:/prova.odt'

7 Risposte

  • Ciao devi formattare il codice col quarto pulsante della toolbar. Vai in modifica sul tuo post e correggi, grazie

  • 12/12/2023 - Naima ha scritto:


    directory destinazione pari a c:/

    Con Windows non puoi scrivere su C:\ senza autorizzazioni particolari

  • Ok, grazie, però se gli dò in input una directory ad esempio c:/prova, lui la crea normalmente e ci mette dentro il file trovato

    E' proprio solo su c:/ che non posso scrivere?

  • Sì, solo sulla root di C è vietato scrivere, per proteggere il sistema da virus e malware. Non su versioni vecchie di Windows

  • D'accordo, grazie non me lo ricordavo questo caso particolare.

    Ora devo fare lo step successivo e cercare una parola all'interno del file: devo aprire il file in modalità binaria, corretto? Ma questo vale per tutti i file o solo certi tipi di file (ad esempio .txt, PDF, etc..)?

    grazie

  • Se hai un nuovo problema va aperto un nuovo thread sul forum, con titolo adeguato, spiegazione ed eventuale codice che hai scritto.

  • D'accordo, grazie mille. Se volete potete cancellare e così poi eventualmente ne apro uno nuovo

Devi accedere o registrarti per scrivere nel forum
7 risposte