我用這種方式打開文件:如何通過int描述符找出文件名? (或「?可我..」)
errno_t err01;
int fHandle;
err01 = _sopen_s(&fHandle, fileName, _O_RDWR, _SH_DENYRW, 0);
現在我應該使用INT-描述符(在這個例子中命名fHandle
)作爲文件的識別器。 問題:我知道只有這個int描述符,才能得到文件名,對應它嗎? (想,我已經失去了fileName
變量的值,打開文件後)
我用這種方式打開文件:如何通過int描述符找出文件名? (或「?可我..」)
errno_t err01;
int fHandle;
err01 = _sopen_s(&fHandle, fileName, _O_RDWR, _SH_DENYRW, 0);
現在我應該使用INT-描述符(在這個例子中命名fHandle
)作爲文件的識別器。 問題:我知道只有這個int描述符,才能得到文件名,對應它嗎? (想,我已經失去了fileName
變量的值,打開文件後)
你應該能夠得到文件句柄是這樣的:
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
謝謝!有用。但是如果我只想得到文件名(不是全部路徑),我可以得到它嗎?或者我只需要從路徑字符串中提取它? (我搜索[這裏](http://msdn.microsoft.com/en-us/library/windows/desktop/aa364232(v = vs.85).aspx),但沒有找到任何適當的功能) – user1234567
This有點冗長的方式: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366789%28v=vs.85%29.aspx – Avatar33
如果可能的話,它很可能是依賴於操作系統。順便說一句。那麼,那是linux還是windows?在Windows上,ProcessHacker似乎能夠找到進程列表中找到的每個句柄的路徑。 – quetzalcoatl