我使用c#.NET 2.0执行DOS命令来ftp文件。所有工作除了1件事,在我调用的cmd文件中,它运行一个PUT语句。现在put语句有一个硬编码的本地文件路径。我需要指定一个动态路径。我试过了
put %~dp0\myfile.DTL myfile.dtl
但它说无法找到该文件。
现在,.NET代码调用一个BAT文件,该文件仅用于调用CMD文件。有趣的是,BAT文件在调用CMD文件时成功使用了相对路径:
ftp.exe -s:%~dp0\oit.cmd
但是,我无法在cmd文件中获得相对的wrok路径:
open <my host>
<user name>
<password>
put <hardcoded path that needs to be relative path>localfilename remotefilename
我会知道它将存在于何处,所以我只需要抓住该文件所在的任何本地直接文件。
答案 0 :(得分:0)
亲戚是“。” (点)。
你能发布确切的情况吗?你在哪个目录,文件在哪里?
小心“〜”char ...它对DOS文件有特殊含义(8.3表示法)
答案 1 :(得分:-2)
使用System.IO.Directory.GetCurrentDirectory()
获取当前(工作)文件夹。
或者,如果您想要相对于.EXE文件的路径,可以使用System.Reflection.Assembly.GetEntryAssembly().CodeBase
获取.EXE文件的完整路径,然后使用System.IO.Path.GetDirectoryName()
获取该路径的目录名称
之后,您可以使用System.IO.Path.Combine
获取相对的绝对路径:
string absPath = Path.Combine( @"c:\working\folder", @"sub\folder\file.ext" );
// absPath == "c:\working\folder\sub\folder\file.ext
// Works with double-dot too:
string absPath2 = Path.Combine( @"c:\working\folder", @"..\up\file.ext" );
// absPath == "c:\working\up\file.ext