2014-03-12 43 views
1

我用這種方式打開文件:如何通過int描述符找出文件名? (或「?可我..」)

errno_t err01; 
int fHandle; 
err01 = _sopen_s(&fHandle, fileName, _O_RDWR, _SH_DENYRW, 0); 

現在我應該使用INT-描述符(在這個例子中命名fHandle)作爲文件的識別器。 問題:我知道只有這個int描述符,才能得到文件名,對應它嗎? (想,我已經失去了fileName變量的值,打開文件後)

+0

如果可能的話,它很可能是依賴於操作系統。順便說一句。那麼,那是linux還是windows?在Windows上,ProcessHacker似乎能夠找到進程列表中找到的每個句柄的路徑。 – quetzalcoatl

回答

1

你應該能夠得到文件句柄是這樣的:

HANDLE hFile; 
int fHandle; 
err01 = _sopen_s(&fHandle, "blah.txt", _O_RDWR, _SH_DENYRW, 0); 
hFile = (HANDLE) _get_osfhandle(fHandle); 

然後,只需使用函數與文件處理工作,爲例如

GetFinalPathNameByHandle(hFile, Path, BUFSIZE, VOLUME_NAME_NT); 
_tprintf(TEXT("path is %s\n"), Path); 

HTH

+0

謝謝!有用。但是如果我只想得到文件名(不是全部路徑),我可以得到它嗎?或者我只需要從路徑字符串中提取它? (我搜索[這裏](http://msdn.microsoft.com/en-us/library/windows/desktop/aa364232(v = vs.85).aspx),但沒有找到任何適當的功能) – user1234567

+0

This有點冗長的方式: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366789%28v=vs.85%29.aspx – Avatar33