Hallo,
ich habe folgendes Problem auf einem Mobile CE CF2 Gerät.
Ich kopiere in einem Konsolenprogramm ein verzeichnis in ein anderes.
Wenn ich es debuge, funktioniert es. Wenn ich es von der cmd aufruge nicht.
Argumente für debug:
"Storage Card\Test" "Onboard Flash\Temp"
und so in der cmd:
test.exe "Storage Card\Test" "Onboard Flash\Temp"
CopyDirectory(args[0],args[1]);
in der Funktion ist dann der Create, und Copy Befehl u.s.w.
static void CopyDirectory(string Source, string Dest)
{....
if(!Directory.Exists(Dest))
{
Directory.CreateDirectory(Dest);
}
file.CopyTo(Path.Combine(Dest, file.Name), true);
Kann mir jemand sagen was ich vielleicht bei der schreibweise in der cmd falsch mache?
Besten Dank
dimuwe
Hallo dimuwe,
lasse dir testweise mal die Argumente einfach ausgeben.
Auch kann es sehr hilfreich sein, Exceptions in der Main generell abzufangen (mit einem Programmweiten catch-Clause) und dann die gefangene Exception auszugeben.
Ein "Wenn ich es von der cmd aufruge nicht." ist nämlich keine wirklich hilfreiche Beschreibung.
Danke winSharp93 für die Antwort.
die Fehlerausgabe: File not found
ich rufe das Prog aber mit einer batch auf und die liegt im gleichen Verzeichnis.
static void CopyDirectory(string Source, string Dest)
{
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(Source);
// Create destination directory
if(!Directory.Exists(Dest))
{
Directory.CreateDirectory(Dest);
}
// Get all files in the current directory
FileInfo[] files = directoryInfo.GetFiles();
// Iterate all files
foreach(FileInfo file in files)
{
bool copy = true;
if(copy)
{
// Copy the file to the destination
file.CopyTo(Path.Combine(Dest, file.Name), true);
}
}
// Iterate all directories in the current directory
// and use recursion
DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
foreach(DirectoryInfo dirSub in directoryInfos)
{
bool copy = true;
if(copy)
{
// Copy directory
CopyDirectory(dirSub.FullName, Path.Combine(Dest, dirSub.Name));
}
}
}
catch(ArgumentException)
{
throw;
}
catch(Exception ex)
{
throw new IOException(ex.Message, ex);
}
}
Gib mal in beiden Fällen (Debug und Release via Batch) Environment.CurrentDirectory aus.
Die Pfade sehen eher relativ als absolut aus, oder (kA wie das unter WinMobile ist)?
Probiere es mal mit absoluten Pfaden.
Aber lasse dir die Pfade doch mal vor dem eigentlichen Zugriff anzeigen.
Oder teste mal, statt dem Programm die Batchdatei mit dem VS-Debugger aufzurufen.
file.CopyTo(Path.Combine(Dest, file.Name), true);
Sicher das in file.Name nicht der Sourcename incl Verzeichnis steht?
Schonmal versucht den Debugger zu benutzen.
vielen Dank für die Antworten.
Aber ich habe herausgefunden, dass mann auf dem CE Gerät so etwas wie folgt nicht in eine Batchdatei schreiben kann.
Storage Card\CF1copy\CF1copy.exe "Storage Card\Data" "Onboard Flash\Test"
selbst wenn man den Aufruf in Hochkomme setzt geht es nicht.
ich habe mir von der exe Datei einen Shortcut gemacht dort dei Parameter hinzu und es funktioniert.
Vielen Dank
dimuwe