2012-06-13 19 views
3

我正在查看代碼FastCopy。我想添加一些選項,以便文件被刪除到回收站而不是永久。如何將路徑存儲在這種結構中,以及如何將其轉換爲其他內容?

我遇到的第一個問題是路徑的存儲方式 - 作爲BYTE[1]類型。我認爲這可能是一些指向真實路徑的指針,但如果它只是一個字節,可能不會。見下面的完整結構:

struct MoveObj { 
    _int64  fileID; 
    _int64  fileSize; 
    enum  Status { START, DONE, ERR } status; 
    DWORD  dwFileAttributes; 
    BYTE  path[1]; 
}; 

任何想法是什麼意思?

我的第二個問題是,我需要將此字符串轉換爲一些稱爲「PCZZTSTR」的可怕MS類型,以便它可以與SHFILEOPSTRUCT structure一起使用。任何建議如何我可以做這種轉換?

+4

瘋狂猜測,是否可以使用'path [1]'變量,如http://stackoverflow.com/questions/3274472/c-double-linked-list-with-abstract-data-type(看到接受的答案)? – simon

+0

[Variable Sized Struct C++]的可能重複(http://stackoverflow.com/questions/688471/variable-sized-struct-c) –

回答

6

在該struct結束時的一個元素的數組path[1]只是一個大致C特技實現可變尺寸的結構。在C99標準之前,C語言中不允許使用可變大小的結構,因此程序員通過這種方式來實現它。

存儲路徑的字節序列從該數組的第一個元素開始(path[0]),但爲該結構分配的內存數量多於sizeof(MoveObj),因此該數組本身長度超過一個字節。如果數組的長度沒有存儲在結構中,我想它是零終止的。

PCZZTSTR聽起來嚇人,但實際上這只是TCHAR s,這是終止了與 '\0'字符一個簡單的C風格的字符串。 P(指向a),CZ(C型,零終止)Z(雙零終止),T(TCHAR),STR(字符串)。

你要轉換爲字節的pathTCHAR秒(這是正常的char S IN舊平臺和WCHAR在現代,基於Unicode-Windowses),把另一個\0字符串的結束,和你有PCZZTSTR

相關問題