...
CString path="C:\\text.txt\\0";
SHFILEOPSTRUCT shfo={0};
shfo.wFunc=FO_DELETE;
shfo.pFrom=path;
shfo.fFlags=FOF_NOCONFIRMATION;
shfo.fAnyOperationsAborted=false;
shfo.hNameMappings=NULL;
shfo.lpszProgressTitle=NULL;
SHFileOperation(&shfo);
...
Удаление файла с помощью SHFileOperation
Неудается удалить файл.Неудается произвести чтение из файла или с диска.:confused:
Код компилируется нормально. Подскажите в чем ошибка?:o
вот код:
Код:
Цитата: CilCatblack
Код:
...
CString path="C:\\text.txt\\0";
...
CString path="C:\\text.txt\\0";
...
Не совсем понятна вот эта вот строчка. Это опечатка? Или Вы просто хотели поставить два завершающих нуля? По-моему это правильней сделать вот так
Код:
char path[MAX_PATH] = "C:\\text.txt";
path[strlen("C:\\text.txt")] = 0;
path[strlen("C:\\text.txt") + 1] = 0;
path[strlen("C:\\text.txt")] = 0;
path[strlen("C:\\text.txt") + 1] = 0;
Код:
CString path="C:\\text.txt\\0";
это путь: С:\text.txt\0. последнии три символа в строке не нужны.
Цитата: lifs
последнии три символа в строке не нужны.
Если оставить
Код:
CString path="C:\\text.txt"
так, не факт, что заработает. В параметре pFrom в SHFILEOPSTRUCT каждое имя файла должно заканчиваться нулем и в конце должен стоять еще один дополнительный 0. А что будет находиться в памяти где CString хранить строку после C:\\text.txt неизвестно.
Код:
CString path="C:\\text.txt\0";
Цитата: nikitozz
Код:
char path[MAX_PATH] = "C:\\text.txt";
path[strlen("C:\\text.txt")] = 0;
path[strlen("C:\\text.txt") + 1] = 0;
path[strlen("C:\\text.txt")] = 0;
path[strlen("C:\\text.txt") + 1] = 0;
Вот теперь работает:) спасибо.
:)
Но как тогда работать если path класса CString т.е. с переменой класса CString?
Как вариант, можно вот так:
Код:
CString str = "MyText";
char *sz = NULL;
sz = new char[str.GetLength() + 2];
strcpy(sz, (LPCSTR)str);
sz[str.GetLength()] = 0;
sz[str.GetLength() + 1] = 0;
........................................................
delete [] sz;
char *sz = NULL;
sz = new char[str.GetLength() + 2];
strcpy(sz, (LPCSTR)str);
sz[str.GetLength()] = 0;
sz[str.GetLength() + 1] = 0;
........................................................
delete [] sz;
Цитата:
The GetBuffer and ReleaseBuffer member functions allow you to gain access to the internal character buffer of a CString object and modify it directly. The following steps show how to use these functions for this purpose:
Call GetBuffer for a CString object and specify the length of the buffer you require.
Use the pointer returned by GetBuffer to write characters directly into the CString object.
Call ReleaseBuffer for the CString object to update all the internal CString state information, such as the length of the string. After modifying a CString object's contents directly, you must call ReleaseBuffer before calling any other CString member functions.
Код:
CString str(_T("C:\\test.txt\0"));
LPCTSTR str1 = str;
LPCTSTR str1 = str;
а SHFILEOPSTRUCT.pFrom как раз имеет тип LPCTSTR
P.S. чем это вариант не подходит?
Код:
CString path="C:\\text.txt\0";
Тема открыта:confused:
Код:
CString path(_T("C:\\text.txt"));
path.AppendChar(0);
path.AppendChar(0);
SHFILEOPSTRUCT shfo={0};
shfo.wFunc=FO_DELETE;
shfo.pFrom = path;
shfo.fFlags=FOF_NOCONFIRMATION;
shfo.fAnyOperationsAborted=false;
shfo.hNameMappings=NULL;
shfo.lpszProgressTitle=NULL;
SHFileOperation(&shfo);
path.AppendChar(0);
path.AppendChar(0);
SHFILEOPSTRUCT shfo={0};
shfo.wFunc=FO_DELETE;
shfo.pFrom = path;
shfo.fFlags=FOF_NOCONFIRMATION;
shfo.fAnyOperationsAborted=false;
shfo.hNameMappings=NULL;
shfo.lpszProgressTitle=NULL;
SHFileOperation(&shfo);
Цитата: CilCatblack
lifs,nikitozz ваши примеры не работают:(
У меня все работает. Вот код.
Код:
CString str = "C:\\TestFile.txt";
char *sz = NULL;
int nResult;
sz = new char[str.GetLength() + 2];
strcpy(sz, (LPCSTR)str);
sz[str.GetLength()] = 0;
sz[str.GetLength() + 1] = 0;
SHFILEOPSTRUCT st;
st.hwnd = this->GetSafeHwnd();
st.wFunc = FO_DELETE;
st.pFrom = sz;
st.pTo = NULL;
st.fFlags = 0;
st.fAnyOperationsAborted = false;
st.hNameMappings = NULL;
st.lpszProgressTitle = NULL;
nResult = SHFileOperation(&st);
delete [] sz;
char *sz = NULL;
int nResult;
sz = new char[str.GetLength() + 2];
strcpy(sz, (LPCSTR)str);
sz[str.GetLength()] = 0;
sz[str.GetLength() + 1] = 0;
SHFILEOPSTRUCT st;
st.hwnd = this->GetSafeHwnd();
st.wFunc = FO_DELETE;
st.pFrom = sz;
st.pTo = NULL;
st.fFlags = 0;
st.fAnyOperationsAborted = false;
st.hNameMappings = NULL;
st.lpszProgressTitle = NULL;
nResult = SHFileOperation(&st);
delete [] sz;
Теперь разобрался:)
Испльзовал оба вариана(lifs,nikitozz).
lifs, ИМХО твой вариант лудше:)