我正在使用相對路徑創建StreamWriter
。但該文件沒有出現。要排除故障,我想檢查完整路徑是我所期望的。因此,如果有一個StreamWriter
實例,我如何獲得要寫入的文件的完整路徑?如何獲取StreamWriter的完整路徑
string fileName = "relative/path.txt"
StreamWriter sw= new StreamWriter(fileName);
// What is the full path of 'sw'?
我正在使用相對路徑創建StreamWriter
。但該文件沒有出現。要排除故障,我想檢查完整路徑是我所期望的。因此,如果有一個StreamWriter
實例,我如何獲得要寫入的文件的完整路徑?如何獲取StreamWriter的完整路徑
string fileName = "relative/path.txt"
StreamWriter sw= new StreamWriter(fileName);
// What is the full path of 'sw'?
從相對路徑得到完整的路徑,使用Path.GetFullPath方法。
例如:
string fileName = "relative/path.txt";
string fullPath = Path.GetFullPath(fileName);
可能是目錄 '相對' 不存在。可以手動創建它。或以編程方式創建如下
string fileName = @"relative\path.txt";
fileName = Path.GetFullPath(fileName);
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
StreamWriter sw= new StreamWriter(fileName, true);
在我的版本的框架,這似乎工作:(通過調試找到)
string fullPath = ((FileStream)(streamWriter.BaseStream)).Name;
謝謝,這正是我正在尋找的! –
恰恰是適合問題標題的那種答案。你的意思是通過「自省」發現的......? –
var fstream = sw.BaseStream as System.IO.FileStream;
if (fstream != null)
Console.WriteLine(GetAbsolutePathByHandle(fstream.SafeFileHandle));
[DllImport("ntdll.dll", CharSet = CharSet.Auto)]
private static extern int NtQueryObject(SafeFileHandle handle, int objectInformationClass, IntPtr buffer, int StructSize, out int returnLength);
static string GetAbsolutePathByHandle(SafeFileHandle handle)
{
var size = 1024;
var buffer = Marshal.AllocCoTaskMem(size);
try
{
int retSize;
var res = NtQueryObject(handle, 1, buffer, size, out retSize);
if (res == -1073741820)
{
Marshal.FreeCoTaskMem(buffer);
size = retSize;
Marshal.AllocCoTaskMem(size);
res = NtQueryObject(handle, 1, buffer, size, out retSize);
}
if (res != 0)
throw new Exception(res.ToString());
var builder = new StringBuilder();
for (int i = 4 + (Environment.Is64BitProcess ? 12 : 4); i < retSize - 2; i += 2)
{
builder.Append((char)Marshal.ReadInt16(buffer, i));
}
return builder.ToString();
}
finally
{
Marshal.FreeCoTaskMem(buffer);
}
}
輸出:
\Device\HarddiskVolume2\bla-bla\relative\path.txt
你是否認爲當你運行你的應用程序在visual studio裏面當前目錄是bin/debug還是bin/release? – Steve
@banging done done done – javapowered
@Steve是的我正在尋找bin/debug/release目錄中的文件....文件不存在,這就是爲什麼我想以編程方式獲得完整路徑的原因。比較我是否正在搜索右側目錄 – javapowered