Hi there, I have a C# program that logs into a remote SFTP site and synchronizes directories using the .NET assembly 5.19.5
I've tested it with 10 people, and 9 of them had no issues. the tenth gets the error message
"cannot open file \\.nul\". I have verified that he can do a synchronize just using winscp.exe himself, so I am hoping that I can fix this.
The code around where the problem seems to start is pretty simple:
string sFileMask = "*|AlfheimLauncher.exe; WinSCP.exe; WinSCPnet.dll; AlfheimLauncher.pdb; config/; Optional Mods/; cache/; LogOutput.log; patchlogs/;"; // white listed files we ignore
using (Session session = new Session())
{
session.DebugLogPath = "patchlogs\\patchdebug.txt";
session.XmlLogPath = "patchlogs\\xmllog.xml";//System.AppDomain.CurrentDomain.BaseDirectory;
session.SessionLogPath = "patchlogs\\patchlog.txt";
SessionOptions sessionOptions = GetSCPSessionOptions();
// Will continuously report progress of synchronization
session.FileTransferred += FileTransferred;
session.OutputDataReceived += OutputDataReceived;
// Connect
session.Open(sessionOptions);
// get a count of files to possibly be patched
TransferOptions tOptions = new TransferOptions();
// White List
tOptions.FileMask = sFileMask;
ComparisonDifferenceCollection diffs = session.CompareDirectories(SynchronizationMode.Local, System.AppDomain.CurrentDomain.BaseDirectory, remotePath, true, false, SynchronizationCriteria.Size, tOptions);
NumberTotalFiles = diffs.Count;
// Synchronize files
if (NumberTotalFiles > 0)
{
AnnounceProgress(0, NumberTotalFiles, "Updating Files...");
foreach(ComparisonDifference diff in diffs)
{
diff.Resolve(session, tOptions);
}
}
sessionOptions
are broken out into their own function, which I will include here just so you have the complete context:
// we keep our credentials in their own function for ease of maintenance
protected SessionOptions GetSCPSessionOptions()
{
SessionOptions sessionOptions = new SessionOptions
{
//This account has read-only access to the latest game files, and no permissions beyond that
Protocol = Protocol.Sftp,
HostName = ConfigurationManager.AppSettings.Get("HostName"),
UserName = ConfigurationManager.AppSettings.Get("UserName"),
Password = ConfigurationManager.AppSettings.Get("PassWord"),
SshHostKeyFingerprint = ConfigurationManager.AppSettings.Get("SshHostKeyFingerprint"),
};
return sessionOptions;
}
In the process of debugging this, I configured the executable to generate a
DebugLogPath
and a
SessionLogPath
. Interestingly, the executable only generated the
DebugLogPath
file for the troubled user (it generated both with me just fine). You can also see that I set the
XmlLogPath
to a directory that my application created, just to ensure that this wasn't a permissions issue.
I can provide a debug log of it working fine if that is helpful. I am attaching the problem debuglog.