|
|
Hi,
I have the file named "mobi.avi",
I used fopen() with the prama mode is "w+" to open this file for my checking in my function, but while this file is opening by the orther program as Window Media then the function will show the error is file can not access. But my problem is when I stop play the file with Window Media, the file removed.
So, I want to ask you how can i do with not remove the file when open error,
Please help me!
Thank in advacnce
|
|
|
|
|
<edit>
In general, try MSDN for this kind of problems (and heaps of other information).
http://msdn1.microsoft.com/en-us/default.aspx[^]
From MSDN:
The character string mode specifies the type of access requested for the file, as follows:
"r"
Opens for reading. If the file does not exist or cannot be found, the fopen call fails.
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
"a"
Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist.
"r+"
Opens for both reading and writing. (The file must exist.)
"w+"
Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed.
"a+"
Opens for reading and appending; the appending operation includes the removal of the EOF marker before new data is written to the file and the EOF marker is restored after writing is complete; creates the file first if it doesn’t exist.
When a file is opened with the "a" or "a+" access type, all write operations occur at the end of the file. The file pointer can be repositioned using fseek or rewind, but is always moved back to the end of the file before any write operation is carried out. Thus, existing data cannot be overwritten.
Probably you want to use "r"
|
|
|
|
|
I used "r" param but with this I can not check if the file is opening or not.
When the file is opened by orther app as window media, I want to check this and let user know the error message, but when i close window media then the file is deleted. How way to don't let app delete automatic when use fopen function?
The follow code i tried:
FILE * file = fopen(m_szFileName, "r");
if (NULL != file)
{
if(remove(m_szFileName)){
strcpy(m_szErrorMessage, "SetRecordFileName(): File access error! Please check and try again!");
return (false);
}
}
FILE* file = fopen(m_szFileName, "w");
if (NULL == file)
{
strcpy(m_szErrorMessage, "SetRecordFileName(): File access error! Please check and try again!");
return (false);
}
|
|
|
|
|
OK, then I got your problem.
You might consider to use the Win32-function CreateFile instead. And set share mode for exclusive access, like this:
CreateFile("TheFile"
GENERIC_READ, // access (read-write) mode
0, // share mode (exclusive access)
NULL, // pointer to security attributes
OPEN_EXISTING, // how to create
FILE_ATTRIBUTE_NORMAL, // file attributes
NULL // handle to file with attributes to copy
);
Then you should get an error if the file is opened by someone else, since th file cannot be opened for exclusive access.
|
|
|
|
|
I used at below but it still delete the file after show the error message and close the Window media, this seem to the same above problem:
Can you help again?
--------------------
HANDLE hFile =CreateFile(m_szFileName,GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(INVALID_HANDLE_VALUE == hFile){
strcpy(m_szErrorMessage, "SetRecordFileName(): File access error! Please check and try again!");
return (false);
}else{
CloseHandle(hFile);
}
|
|
|
|
|
The file is opened for reading (only), this CreateFile call can never delete the file as long as you use GENERIC_READ.
But I do suggest you to:
1.
Use OPEN_EXISTING instead of OPEN_ALWAYS. (The file already exists, doesn't it?)
2.
Use share mode 0 for exclusive access.
|
|
|
|
|
If I used OPEN_EXISTING and share mode 0, but I can not create a new file if the file have not existed,
My function is record a file avi,
if the file have not existed then create new one,
if the file existed and have not opened by orther app then over write this,
if the file existed and opened by orther app then give the user error is can not access and do nothing.
Any help again?
Thanks again!
|
|
|
|
|
That's a different story!
I suggetst you to do like this:
Open the file for reading, exclusive access. Then you will know two things:
A.
The file exists.
B.
The file is not opened by some other application.
Close the file, if it's open.
If you get an error, then examine the error. If you get ERROR_ACCESS_VIOLATION (?) then the file exists but is opened by some other application. Show user error and terminate the function.
If you get an error meaning that the file doesn't exist, then create a new file. (CreateFile, GENERIC_WRITE, maybe exclusive access).
I think that should do it.
|
|
|
|
|
Hi,
HANDLE hFile =CreateFile(m_szFileName,GENERIC_READ, // access (read-write) mode
0, // share mode (exclusive access)
NULL, // pointer to security attributes
OPEN_EXISTING, // how to create
FILE_ATTRIBUTE_NORMAL, // file attributes
NULL // handle to file with attributes to copy
);
I can not get the case as above(A and B), the hFile HANDLE always is 0xffffff when the file not existed and the file opened by orther function (always is INVALID_HANDLE_VALUE for tow case),
the constant ERROR_ACCESS_VIOLATION had not defined.
How way to recognize what the error happends with CreatFile function?
Any help again?
|
|
|
|
|
|
Hi,
I still have problem with deleting file.
I did as below:
HANDLE hFile =CreateFile(m_szFileName,GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
DWORD lerr =0;
lerr=GetLastError();
if(INVALID_HANDLE_VALUE == hFile){
if(lerr==ERROR_ACCESS_DENIED){
fclose(logFile);
strcpy(m_szErrorMessage, "SetRecordFileName(): File access error! Please check and try again!");
return (false);
}
}else{
}
This show the error when the file opened by orther appp but it still be deleted when the app close.
Any help again??
Many thank!
|
|
|
|
|
Hi,
I resolved my problem,
Many thank for help.
|
|
|
|
|
Any clues to implement a list item as a hyperlinked text using MFC?
On clicking the hyperlinked list item, some other action should take place.
Any clues Please.
Thanks
Raji
|
|
|
|
|
RajiRaghu wrote: Any clues to implement a list item as a hyperlinked text using MFC?
You can OwnerDraw the list box to make it's items to behave like a hyperlink. When the mouse is over the item set the forecolor to blue and underline the text. When out restore previous state. Changing mouse cursor also looks good.
There are selection change event handlers that can do the click part.
Nibu thomas
A Developer
Programming tips[^] My site[^]
|
|
|
|
|
Its not for your problem but maybe it is some helpful to you Here[^]
whitesky
|
|
|
|
|
Hai to all
whenever i make a new project(MFC(exe)) in vc++ and execute it then it
gave to message box "could not execute:invalid directory(win32,error 267)
and then could not execute the program.
please any one tell me why not my program is execute.
Thanking you
mailing me
Yogi
|
|
|
|
|
Check the directory settings from the Menu Tools>Options [Directories tab]
If it is incorrect put the correct value
|
|
|
|
|
Is there any code in vc++ to shut down the local host system and remote machine.One of my friend told there is code in VB to shutdown the system.Is there in MFC?
|
|
|
|
|
ExitWindowsEx()
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Actually there no intrinsic function in VB6 for shutdowning the System. It uses Shell TypeLibraries to utilise the Shell features. In MFC I dont' know where there is such a fesiloty available now. But you can shutdown the local system using the function ExitWindowsEx( UINT, DWORD )
The first parameter Indicate action of Exit it should be EWX_SHUTDOWN for shutdowing the system
The second parameter is the type of Shutdown it could be either EWX_FORCE of EWX_FORCEIFHANG
|
|
|
|
|
|
|
How can i resize the dialog box controls when i resize the dialog box??
|
|
|
|
|
sruti_p wrote: How can i resize the dialog box controls when i resize the dialog box??
Well you've got to design a layout manager. Just like the ones you find in Java.
The best place to trigger a layout is WM_SIZE .
Nibu thomas
A Developer
Programming tips[^] My site[^]
|
|
|
|