Foutbericht “Kon een deel van het pad niet vinden”

Ik programmeer in c# en wil een map met submappen van een flashdisk naar opstarten kopiëren.

Hier is mijn code:

private void copyBat()
{
    try
    {
        string source_dir = "E:\\Debug\\VipBat";
        string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
        if (!System.IO.Directory.Exists(destination_dir))
        {
            System.IO.Directory.CreateDirectory(destination_dir);
        }       
        // Create subdirectory structure in destination    
        foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories))
        {
            Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length));          
        }
        foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories))
        {
            File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

Ik heb een foutmelding gekregen:

Kon een deel van het pad E:\Debug\VipBat niet vinden


Antwoord 1, autoriteit 100%

De fout spreekt voor zich. Het pad dat u probeert te openen is niet aanwezig.

string source_dir = "E:\\Debug\\VipBat\\{0}";

Ik weet zeker dat dit niet het juiste pad is. De map Debugrechtstreeks in de E:-drive ziet er volgens mij verkeerd uit. Ik denk dat er de mapmap met de projectnaam aanwezig moet zijn.

Ten tweede; wat is {0}in je string. Ik weet zeker dat het een tijdelijke aanduiding voor een argument is, omdat de mapnaam geen {0}zo’n naam kan bevatten. U moet dus String.Format()gebruiken om de werkelijke waarde te vervangen.

string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName);

Maar controleer eerst het pad dat u probeert te openen.


Antwoord 2, autoriteit 30%

Er is iets mis. Je hebt geschreven:

string source_dir = @"E:\\Debug\\VipBat\\{0}";

en de fout was

Kon een deel van het pad E\Debug\VCCSBat niet vinden

Dit is niet dezelfde map.

Er zit een probleem in je code, je moet gebruiken:

string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @

of

string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\

Antwoord 3, autoriteit 17%

Is station E een toegewezen station? Vervolgens kan het worden gemaakt door een ander account dan het gebruikersaccount. Dit kan de oorzaak van de fout zijn.


Antwoord 4, autoriteit 9%

Waarschijnlijk niet gerelateerd, maar overweeg om Path.Combinete gebruiken in plaats van destination_dir + dir.Substring(...). Zo te zien zal je .Substring() in het begin een speling achterlaten, maar de hulpklassen zoals Path zijn er met een reden.


Antwoord 5, autoriteit 9%

Ik had dezelfde fout, hoewel het probleem in mijn geval te maken had met de opmaak van het DESTINATION-pad. De bovenstaande opmerkingen zijn correct met betrekking tot het debuggen van de opmaak van de padtekenreeks, maar er lijkt een fout te zitten in de File.Copy-uitzonderingsrapportage waarbij het nog steeds het SOURCE-pad teruggooit in plaats van het DESTINATION-pad. Vergeet dus niet ook hier te kijken.

-TC


Antwoord 6, autoriteit 9%

Er kan een van de twee oorzaken zijn voor deze fout:

  1. Pad is niet correct – maar het is minder waarschijnlijk omdat CreateDirectory een pad zou moeten maken, tenzij het pad zelf niet geldig is, lees ongeldige tekens
  2. Account waarmee uw toepassing draait, heeft geen rechten om een map te maken op de padlocatie, bijvoorbeeld als u een map op een gedeelde schijf probeert te maken met onvoldoende rechten, enz.

Antwoord 7, autoriteit 4%

Ik heb een soortgelijk probleem opgelost door Visual Studio eenvoudig opnieuw op te starten met beheerdersrechten.

Het probleem was dat het niet één project kon openen dat gerelateerd was aan Sharepoint zonder verhoogde toegang.


Antwoord 8, autoriteit 4%

File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);

Deze regel bevat de fout omdat de verwachte code de directory name + file nameis, niet de bestandsnaam.

Dit is de juiste

File.Copy(source_dir + file_name, destination_dir + file_name.Substring(source_dir.Length), true);

Other episodes