2012-07-10 45 views
0

我寫了一個函數來創建在指定目錄下的文本文件,並寫入當前的ProcessID它我的函數來創建一個鎖定文件會導致訪問衝突

的函數被調用時點擊了確定按鈕時對話框,它似乎做我想要的,但是當我調用它時,應用程序在對話框關閉時崩潰。 (如果我刪除我的功能,它會關閉沒有麻煩)。

這是我有:

void LockFolder(UnicodeString folderLocation) 
{ 
    DWORD processID = GetCurrentProcessId(); 
    _TCHAR currentProcessID[sizeof(DWORD)]; 
    _TCHAR* lockID; 
    _TCHAR* lock = folderLocation.c_str(); 
    fstream lockFile; 

    _stprintf(currentProcessID,_T("%i"),processID); 
    _tcscat(lock,_T("Lock.txt")); 

    lockFile.open(lock,ios::out); 
    lockFile<<currentProcessID; 
    lockFile.close(); 
} 

做出了一些改變,但問題仍然存在, 版本2:

void LockFolder(UnicodeString folderLocation) 
{ 
    DWORD processID = GetCurrentProcessId(); 
    _TCHAR* lock = folderLocation.c_str(); 
    _tcscat(lock,_T("Lock.txt")); 

    fstream lockFile; 
    lockFile.open(lock,ios::out); 
    lockFile<<processID<<"\0"; 
    lockFile.close(); 
} 
+0

什麼是'folderLocation'?如果它是std :: wstring,則不能將其c_str()結果指定爲wchar_t *,因爲它應該是const wchar_t *,然後不能將其用作_tcscat輸出緩衝區! – 2012-07-10 17:18:14

+0

既不會輸出一個字符串數組,也不是空終止的,因爲它衰減到一個指針並被解釋爲一個C字符串。 – 2012-07-10 17:20:54

+0

該字符串現在是空終止,文本文件似乎正在寫好,但我仍然得到崩潰:s – 2012-07-10 17:28:10

回答

0

在這行你破壞堆:

_TCHAR* lock = folderLocation.c_str(); 
_tcscat(lock,_T("Lock.txt")); 

取而代之,請執行以下操作:

std::stringstream str; // or wstringstream 
str << folderLocation << "Lock.txt"; // or L"Lock.txt" 
std::string lock = str.str(); // or wstring