|
Hi there!
How do we call these methods from dotnet? Is there any dotnet wrapper?
InternetOpenUrlA
HttpQueryInfoA
InternetReadFile
FormatMessage
Thanks!!
|
|
|
|
|
|
If there are two mouses(A,B) pluged in a computer, I wonder how to distinguish A from B.
plz help me
|
|
|
|
|
The two mice send the same signal. I doubt it's possible to work out which is which.
Also, I suspect you meant to ask this in the Visual C++ forum.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Ok Thnak you very much.
|
|
|
|
|
Charles of Korea wrote: I wonder how to distinguish A from B.
Make sure they are different colors?
Gary
|
|
|
|
|
|
You could use FtpFindFirstFile(), InternetFindNextFile(), and InternetCloseHandle() to
get the filenames using a wildcard.
For each file found, use FtpGetFile() (or FtpOpenFile()/InternetReadFile()) to download the
file.
If you're not using managed c++, then you should post your questions on the Visual C++/MFC board.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
|
Unless you've set the current/working directory, you'll need to append each found file name to
a path.
Maybe that's the problem??
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Armond Sarkisian wrote: Using the functions above, how would I be able to use a wildcare?
Armond Sarkisian wrote: I want to be able to grab all zip files from ftp://my_ftp/files/*.zip
Here's a basic example:
HINTERNET hInet = ::InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hFTPSession = ::InternetConnect(hInet, _T("127.1.0.0"), INTERNET_DEFAULT_FTP_PORT, NULL, NULL, INTERNET_SERVICE_FTP, 0, 0);
WIN32_FIND_DATA FindData;
HINTERNET hFtpFind = ::FtpFindFirstFile(hFTPSession, _T("path\\*.zip"), &FindData, 0, 0);
if (hFtpFind)
{
do
{
TCHAR szFileName[MAX_PATH];
_tcscpy_s(szFileName, FindData.cFileName);
<font color="Red">
}
while (::InternetFindNextFile(hFtpFind, &FindData));
::InternetCloseHandle(hFtpFind);
}
else
{
DWORD dwError = GetLastError();
if(dwError == ERROR_NO_MORE_FILES)
{
}
else
{
}
}
::InternetCloseHandle(hFTPSession);
::InternetCloseHandle(hInet);
Info about the WinInet functions: WinInet Functions[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
What's the error?
if (FALSE == FtpGetFile( hFtpFind, szFileName, szFileName, 0, 0, FTP_TRANSFER_TYPE_BINARY, 0 ) )
{
geterror = GetLastError( );
<font color="Red">
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
12018 == ERROR_INTERNET_INCORRECT_HANDLE_TYPE
You maybe shouldn't be passing the find handle. It should be the
session handle.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
The session handle is returned by InternetConnect(), the same one
you pass to FtpFindFirstFile().
That's what you want to pass to FtpGetFile().
mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
32 ERROR_SHARING_VIOLATION
The process cannot access the file because it is being used by another process.
12003 ERROR_INTERNET_EXTENDED_ERROR
An extended error was returned from the server. This is typically a string or buffer containing a verbose error message. Call InternetGetLastResponseInfo to retrieve the error text.
Are you still passing NULL as the second parameter to FtpFindFirstFile?
I thought you wanted just the zip files(?).
Also you should only call GetLastError() if a function fails (e.g. FtpGetFile() returns FALSE).
Not all functions that succeed reset the last error to 0 so calling GetLastError() when there
was no error can return an error code from some other call unrelated!!
Example:
Your calls should look something like
if (!::FtpGetFile(...))
{
errcode = ::GetLastError();
... handle error
}
NOT
// BAD!
BOOL result = ::FtpGetFile(...);
errcode = ::GetLastError(); //<-- errcode only valid here if result is FALSE. No need to call unless result is FALSE!
...
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
int* ptr; and int *ptr; mean the same. It's just a difference in coding style.
Dynamic "memory" allocation deals with your code asking the operation system to reserve memory for your variable. The memory remains reserved for your variable until your code explicitly ask the operating system to unreserve the memory. You have a memory leak if you fail to unreserve your variable's allocated memory before your application stops executing your code.
Please ask C++ questions in the C++ forum.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|
|
No its not its a global variable int *pPointer; not local and first section of your question they are same.
|
|
|
|
|
I think it is not a good idea to delete the messages,...expecially if you delete the question!
If you solve your problem you could vote 5 to who solve it for you and (if you want) you can change the title of your question adding a prefix like [SOLVED].
The reason is that someone could have your same problem, and he can learn from what you and the other poster wrote.
Thanks
Russell
|
|
|
|
|
Thanks for that comment and I gave you a 5! Most of the time, I give answers without replies or ratings (good or bad). Feedback helps me to improve.
Geo.
"We make a living by what we get, we make a life by what we give." --Winston Churchill
|
|
|
|