我正在使用等效於ls和cd的C語言編寫文件瀏覽器,讓用戶瀏覽文件系統並選擇文件。這一切都運行良好 - 我可以儘可能的選擇一個struct dirent *
,代表他們想要選擇的文件的目錄條目。但是,我想在我的程序中打開此文件,我知道如何做到這一點的唯一方法是通過fopen(FILE* fptr)
。有沒有一種方法可以將struct dirent *
轉換爲FILE*
? A struct dirent
有一個屬性ino_t d_fileno
它指的是「文件序列號」 - 是否與文件描述符相同?我可以使用該文件描述符來打開FILE*
嗎?C將struct dirent *轉換爲FILE *
1
A
回答
3
無法將'struct dirent *
'轉換爲FILE *
,因爲第一個與一個目錄條目無關,無論它是文件,子目錄還是其他內容,無論您是否擁有該文件的訪問權限以及以此類推,而對於已打開的文件只能有FILE *
。也。有沒有辦法打開一個文件由它的inode,
你可以做的,就是從建目錄名文件的路徑是什麼,你已經在opendir()
和dir->d_name
和fopen()
使用的路徑:
FILE *openfile(const char *dirname, struct dirent *dir, const char *mode)
{
char pathname[1024]; /* should alwys be big enough */
FILE *fp;
sprintf(pathname, "%s/%s", dirname, dir->d_name);
fp = fopen(pathname, mode);
return fp;
}
請注意,我假設,如果dirname
不是絕對路徑,您不需要撥打opendir(dirname)
和openfile(....)
之間的任何chdir()
秒
0
您不應該將struct dirent *
轉換爲FILE *
。如果你想要一個struct dirent
對應的文件名,你可以從這個結構中獲得。
舉例來說,如果你有
struct dirent *dp = readdir(...);
那麼這個目錄項的文件名是dp->dname
。
查看readdir(3)
瞭解更多詳情。
相關問題
- 1. C:將字節數組轉換爲struct
- 2. 將C結構轉換爲FFI :: Struct
- 3. 將FILE *轉換爲ifstream C++,Android NDK
- 4. C++ - 轉換FILE *爲char *
- 5. 將struct __CFString *轉換爲CFStringRef
- 6. 將QFile轉換爲FILE *
- 7. 如何將shared_ptr <FILE>轉換爲C++中的FILE *文件?
- 8. *將char轉換爲main並將* char轉換爲struct
- 9. struct dirent在頭文件中沒有de_type
- 10. 如何將Struct轉換爲類
- 11. 將名稱值對轉換爲struct
- 12. 如何將uint32_t轉換爲struct in_addr?
- 13. 將MATLAB對象轉換爲struct?
- 14. C d_name [256]和NAME_MAX定義中的struct dirent
- 15. 將byte []轉換爲Java中的Object File
- 16. 將圖像URI轉換爲File對象
- 17. 如何將PIL`Image`轉換爲Django`File`?
- 18. 將std :: filebuf(FILE *)轉換爲使用libC++
- 19. 幾乎將struct的向量轉換爲struct成員的向量
- 20. 如何在C++/cli中將struct tm轉換爲DateTime
- 21. 如何將struct數組轉換爲c#中的字節數組?
- 22. 如何將struct屬性轉換爲C++中的指針引用?
- 23. 如何將Java對象轉換爲C struct
- 24. 如何在C中將struct tm轉換爲long int?
- 25. C「參數的類型是'struct file *'」
- 26. 將struct更改爲C++類
- 27. 在沒有malloc的情況下分配struct dirent()
- 28. 如何轉換Lparam型在C#STRUCT
- 29. 將c#RSACryptoServiceProvider轉換爲C++
- 30. 將QT/C++轉換爲C#
您是指dp-> d_name? – sredmond
@sredmond哎呀。你是對的。 –