Я прочитал это Почта. Я пытаюсь переместить файл из одного места в другое на сервере 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
Я не понимаю, почему это проблема. Глядя на другую статью (Почта), я убедился, что оба пользователя, с которыми я тестирую, имеют полные права во всех каталогах, и я перемещаю один файл в другое имя файла в другом каталоге. Это была одна из резолюций в упомянутой статье.
У меня второй вопрос, связанный с ошибкой. Если я пытался отладить эту проблему, используя синтаксис URL-пути, как указано выше, какой пользователь пытается выполнить эту задачу на сервере?
Является ли пользователь тем же пользователем, что и на рабочей станции, выполняющей отладку в Visual Studio, или запрос на перемещение или копирование обрабатывается пользователем Интернета по умолчанию?
Я спрашиваю об этом, потому что после исправления проблемы с поврежденным путем я все еще получал доступ к пути, запрещенному при отладке ошибок с использованием URL-адресов, но не тогда, когда приложение работало непосредственно на сервере.
@ ThomasCorbière Я нашел проблему. Это плохой путь.





Я не знаю F#, но в приложении Windows или Windows Server вам нужно использовать Application ExecutablePath и удалить 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#. Разместил этот код, чтобы получить представление о вашем вопросе
Эта программа выполняется из Visual Studio 2012 с использованием URL-путей и предназначена для отладки. Производственное приложение использует буквы дисков и пути и выдает ту же ошибку. Итак, я запутался в вашем ответе.
Во-первых, возникла проблема с путём. Частичный путь (без имени файла) копировался в полный путь с именем файла. После того, как база данных Access приложения (источник путей, используемых программой) была снова настроена на использование стандартных путей к дискам Windows - G:\dir1\dir2\file1.007 и неверный путь был исправлен, программа вернулась в нормальное состояние.
Было бы неплохо, если бы File.Move (или Copy) выдавал более надежную ошибку.
Не могли бы вы объяснить, как именно значения для
currentPathиdestPathполучаются или декларируются в программе? Мне интересно, не связано ли это каким-то образом с двойной обратной косой чертой (или ее отсутствием вmusys_read\musys) ...