簡體   English   中英

如何在C#中的相對路徑中獲取文件

[英]How to get files in a relative path in C#

如果我有一個名為app.exe的可執行文件,這是我在C#中編碼的,我如何使用相對路徑從與app.exe相同的目錄中加載文件夾?

這會在路徑異常中拋出非法字符:

string [ ] files = Directory.GetFiles ( "\\Archive\\*.zip" );

如何在C#中做到這一點?

要確保您擁有應用程序的路徑(而不僅僅是當前目錄),請使用以下命令:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getcurrentprocess.aspx

現在您有一個Process對象,它表示正在運行的進程。

然后使用Process.MainModule.FileName

http://msdn.microsoft.com/en-us/library/system.diagnostics.processmodule.filename.aspx

最后,使用Path.GetDirectoryName獲取包含.exe的文件夾:

http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname.aspx

所以這就是你想要的:

string folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Archive\";
string filter = "*.zip";
string[] files = Directory.GetFiles(folder, filter);

(請注意, "\\Archive\\"從你的問題是現在@"\\Archive\\" :你所需要的@使得\\反斜杠不會被解釋為轉義序列的開始)

希望有所幫助!

string currentDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string archiveFolder = Path.Combine(currentDirectory, "archive");
string[] files = Directory.GetFiles(archiveFolder, "*.zip");

第一個參數是路徑。 第二個是您要使用的搜索模式。

寫這樣:

string[] files = Directory.GetFiles(@".\Archive", "*.zip");

是相對於您啟動exe的文件夾,@是允許在名稱中的\\。

使用過濾器時,將其作為第二個參數傳遞。 您還可以添加第三個參數以指定是否要遞歸搜索模式。

要獲取.exe實際所在的文件夾,請使用:

var executingPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

正如其他人所說,你可以/應該在@前面添加字符串(雖然你也可以只是逃避反斜杠),但是他們所掩蓋的東西(即,盡管做了與之相關的更改但沒有提起它)是事實上,正如我最近發現的那樣,在路徑名的開頭使用\\ ,沒有. 表示當前目錄,是指當前目錄樹的根目錄。

C:\foo\bar>cd \
C:\>

C:\foo\bar>cd .\
C:\foo\bar>

(使用.本身具有使用相同的效果.\\本身,從我的經驗,我不知道是否有任何特定的情況下,它們在某種程度上並不意味着同樣的事情。)

如果你願意的話,你也可以放棄領先.\\

C:\foo>cd bar
C:\foo\bar>

事實上,如果你真的想要,你甚至不需要使用反斜杠。 Forwardslashes工作得非常好! (雖然單個/不與當前驅動器根別名,但是\\ 。)

C:\>cd foo/bar
C:\foo\bar>

你甚至可以替換它們。

C:\>cd foo/bar\baz
C:\foo\bar\baz>

......但是我真的離開這里了,所以如果你不感興趣,可以隨意忽略這一切。

非常直接,使用相對路徑

string[] offerFiles = Directory.GetFiles(Server.MapPath("~/offers"), "*.csv");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM