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 Debug
rechtstreeks 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.Combine
te 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:
- 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
- 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 name
is, niet de bestandsnaam.
Dit is de juiste
File.Copy(source_dir + file_name, destination_dir + file_name.Substring(source_dir.Length), true);