我已阅读此post。我试图在Windows服务器上将文件从一个地方移动到另一个地方。运行F#程序的用户具有执行.Net File.Move语句的完全权限,我使用文件资源管理器登录服务器的同一用户手动测试了此移动。
我想弄清楚我做错了什么。
以下是相关代码,copyOnly
为false
。
let rc =
try
if copyOnly then
File.Copy((currentPath + fnam), (destPath + new_file_dest)) |> ignore
logH.WriteLine(generateTimeStamp () + ": " + currentPath + fnam + " copied to " + (new_file_dest + fnam))
else
File.Move((currentPath + fnam), (destPath + new_file_dest)) |> ignore
logH.WriteLine(generateTimeStamp () + ": " + currentPath + fnam + " moved to " + destPath + new_file_dest)
true
with ex ->
logH.WriteLine(generateTimeStamp () + ": " + "An error occrred trying to move or copy " + currentPath + fnam + " to " + (destPath + new_file_dest))
printfn "%A" ex
false
rc
currentPath = \\\\Munis2\\musys_read\\musys\\import_prod\\
fnam = import_arlckbox.007
destPath = \\\\Munis2\\Munis_IC_DataExchange\\archive\\
new_file_dest = import_arlckbox_6132018_15645.007
我很难过为什么这是一个问题。看一下另一篇文章(post),我确实确保我测试的两个用户都拥有所有目录的完全权限,并且我将一个文件移动到另一个目录中的另一个文件名。这是参考文章中的一项决议。
我有第二个与错误有关的问题。如果我尝试使用URL路径语法调试此问题,如上所示,哪个用户尝试在服务器上执行此任务?
用户与Visual Studio中的工作站调试用户相同,还是默认互联网用户处理移动或复制的请求?
我问这个问题,因为在修复了损坏的路径问题之后,我仍然无法使用URL拒绝错误调试路径,但是当应用程序直接在服务器上运行时却没有。
答案 0 :(得分:1)
我不知道F#但是在Windows应用或Windows Server中你需要使用Application ExecutablePath和Remove bin \ Debug,如图所示
string startupPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) + "\\Templates");
startupPath = startupPath.Replace("bin\\Debug\\", string.Empty);
var newfileName2 = Guid.NewGuid() + ".xlsx";
string destinationPath = Path.Combine(startupPath, newfileName2);
File.Copy(sourcefile, destinationPath, true);
这是C#代码。发布此代码以了解您的问题
答案 1 :(得分:1)
首先,存在路径问题。部分路径(没有文件名)被复制到带有文件名的完整路径中。一旦应用程序的Access数据库(程序使用的路径源)重新设置为使用标准Windows驱动器路径 - G:\dir1\dir2\file1.007
并且修复了无效路径,程序就会恢复正常。 / p>
如果File.Move
(或复制)提供更强大的错误,那仍然会很好。