-
May 19th, 2011, 09:23 PM
#1
Can someone please run this in XP
Could someone please run this code in XP and let me know if it works. I am on Windows 7 and have looked at this code for 2 months now and not able to find a solution to save my life. If you see what is wrong with it though please let me know my output keeps getting "file not given"
Code:
#include <windows.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <list>
using namespace std;
bool isPalindrome(const std::string& s)
{
std::string sReverse = s;
std::reverse(sReverse.begin(), sReverse.end());
return s == sReverse; // return true if the reverse is the same as non-reverse
}
//MAIN FUNCTION
int main(int argc, char *argv[]){
HANDLE readFile, writeFile;
HANDLE readFileMap, writeFileMap;
PVOID pvreadFile, pvwriteFile;
DWORD readFileSize;
string word = "";
list<string> words;
//VERIFYING ARGUMENTS
if(argc>1)
{
readFile = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//IF STATEMENT TO CHECK IF THE READ FILE IS NOT VALID
if(readFile == INVALID_HANDLE_VALUE)
{
//DISPLAY ERROR MESSAGE
std::cout << "Read file could not be opened." << std::endl;
return(FALSE);
}
readFileMap = CreateFileMapping(readFile, NULL, PAGE_READONLY, 0, 0, NULL);
//IF STATEMENT TO SEE IF THE READFILEMAP IS NULL
if(readFileMap == NULL)
{
//DISPLAY ERROR MESSAGE
std::cout << "Read file map could not be opened." << std::endl;
CloseHandle(readFile);
return(FALSE);
}
pvreadFile = MapViewOfFile(readFileMap, FILE_MAP_READ, 0, 0, 0);
//IF STATEMENT TO DETERMINE IF PVREADFILE IS NULL
if(pvreadFile == NULL)
{
//DISPLAY ERROR MESSAGE
std::cout << "Could not map view of read file." << std::endl;
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
//DETERMINE SIZE LIMIT OF INPUT FILE
readFileSize = GetFileSize(readFile, NULL);
//writeFile = CreateFile(argv[2], GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
writeFile = CreateFile(argv[2], GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//IF STATEMENT TO DETERMINE IF WRITE FILE IS VALID OR NOT
if(writeFile == INVALID_HANDLE_VALUE)
{
//DISPLAY ERROR MESSSAGE IF FILE CAN'T BE OPENED
std::cout << "Write file could not be opened." << std::endl;
//std::cout << "argv[1] = " << argv[1] << " argv[2] = " << argv[2] << std::endl;
UnmapViewOfFile(pvreadFile);
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
writeFileMap = CreateFileMapping(writeFile, NULL, PAGE_READWRITE, 0, readFileSize, NULL);
//IF STATEMENT TO DETERMINE IF WRITE FILE MAP IS NULL
if(writeFileMap == NULL)
{
//DISPLAY ERROR MESSAGE THAT THE WRITE FILE CANNOT BE MAPPED
std::cout << "Write File could not be mapped." << std::endl;
CloseHandle(writeFile);
UnmapViewOfFile(pvreadFile);
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
pvwriteFile = MapViewOfFile(writeFileMap, FILE_MAP_WRITE, 0,0,0);
//IF STATEMENT IF THE PVWRITEFILE IS NULL
if(pvwriteFile == NULL)
{
//DISPLAY ERROR MESSAGE THAT I COULD NOT OPEN MAP VIEW OF WRITE FILE
std::cout << "Could not open map view of write file." << std::endl;
}
//POINTERS NEED TO BE CREATED
PSTR readptr = (PSTR) pvreadFile;
PSTR writeptr = (PSTR) pvwriteFile;
{
bool ret = isPalindrome( "eve redivider" );
}
//CLEANUP THE FILE
UnmapViewOfFile(pvwriteFile);
UnmapViewOfFile(pvreadFile);
CloseHandle(writeFileMap);
CloseHandle(readFileMap);
CloseHandle(writeFile);
CloseHandle(readFile);
}
//ELSE STATEMENT IF CANNOT FIND FILE
else
//DISPLAY ERROR MESSAGE THAT NO FILE IS GIVEN
cout << "No file given" << endl << endl;
//RETURN A VALUE
return 0;
}
-
May 19th, 2011, 09:29 PM
#2
Re: Can someone please run this in XP
Originally Posted by jimJohnson123
If you see what is wrong with it though please let me know my output keeps getting "file not given"
It took you two months to see that this is executed?
Code:
if(argc>1)
{
// stuff I don't care about
}
//ELSE STATEMENT IF CANNOT FIND FILE
else
//DISPLAY ERROR MESSAGE THAT NO FILE IS GIVEN
cout << "No file given" << endl << endl;
So why does it fall into the else block? (and please fix your formatting).
Regards,
Paul McKenzie
Last edited by Paul McKenzie; May 19th, 2011 at 09:32 PM.
-
May 19th, 2011, 09:33 PM
#3
Re: Can someone please run this in XP
I can see that this is what is executing I just cant see what is wrong with it. I believe my issue is in the CreateFile but not fore sure
-
May 19th, 2011, 09:37 PM
#4
Re: Can someone please run this in XP
Originally Posted by jimJohnson123
I can see that this is what is executing I just cant see what is wrong with it. I believe my issue is in the CreateFile but not fore sure
???
Are you looking at the code? It is clearly obvious that argc is <= 1 causing that line to be printed. I even simplified it for you in my previous post.
Now why is argc <= 1? It has nothing to do with CreateFile() not working. It has everything to do with your command-line arguments not being correct.
Regards,
Paul McKenzie
-
May 19th, 2011, 09:58 PM
#5
Re: Can someone please run this in XP
Would anyone else be able to look at this. I mean no disrespect Paul but I am really not a good at the programming aspect for my degree(which is not what I am even going into) and dont understand exactly what I am supposed to do still but I do appreciate you trying and I will rate you top in the post ratings.
-
May 20th, 2011, 02:55 AM
#6
-
May 20th, 2011, 05:08 AM
#7
Re: Can someone please run this in XP
Originally Posted by jimJohnson123
Would anyone else be able to look at this.
I told you what was wrong.
I don't understand -- did you write this code? If you did, then how can you not know what if/else is supposed to do? No one else can break it down for you any simpler than that.
Code:
if ( this statement is true )
{
// do this stuff
}
else // statement is not true
{
// do this instead
}
So look at your code -- replace "this statement is true" with "argc>1". Now, the only way that line could have printed was if argc>1 is not true. So by using logic, argc must have been <= 1 for that line to be printed, since argc>1 was false.
Regards,
Paul McKenzie
-
May 21st, 2011, 03:17 PM
#8
Re: Can someone please run this in XP
is this what you are talking about...
Code:
#include <windows.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <list>
using namespace std;
bool isPalindrome(const std::string& s)
{
std::string sReverse = s;
std::reverse(sReverse.begin(), sReverse.end());
return s == sReverse; // return true if the reverse is the same as non-reverse
}
//MAIN FUNCTION
int main(int argc, char *argv[]){
HANDLE readFile, writeFile;
HANDLE readFileMap, writeFileMap;
PVOID pvreadFile, pvwriteFile;
DWORD readFileSize;
string word = "";
list<string> words;
//VERIFYING ARGUMENTS
if(argc>1)
{
readFile = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//IF STATEMENT TO CHECK IF THE READ FILE IS NOT VALID
if(readFile == INVALID_HANDLE_VALUE)
{
//DISPLAY ERROR MESSAGE
std::cout << "Read file could not be opened." << std::endl;
return(FALSE);
}
readFileMap = CreateFileMapping(readFile, NULL, PAGE_READONLY, 0, 0, NULL);
//IF STATEMENT TO SEE IF THE READFILEMAP IS NULL
if(readFileMap == NULL)
{
//DISPLAY ERROR MESSAGE
std::cout << "Read file map could not be opened." << std::endl;
CloseHandle(readFile);
return(FALSE);
}
pvreadFile = MapViewOfFile(readFileMap, FILE_MAP_READ, 0, 0, 0);
//IF STATEMENT TO DETERMINE IF PVREADFILE IS NULL
if(pvreadFile == NULL)
{
//DISPLAY ERROR MESSAGE
std::cout << "Could not map view of read file." << std::endl;
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
//DETERMINE SIZE LIMIT OF INPUT FILE
readFileSize = GetFileSize(readFile, NULL);
//writeFile = CreateFile(argv[2], GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
writeFile = CreateFile(argv[2], GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
//IF STATEMENT TO DETERMINE IF WRITE FILE IS VALID OR NOT
if(writeFile == INVALID_HANDLE_VALUE)
{
//DISPLAY ERROR MESSSAGE IF FILE CAN'T BE OPENED
std::cout << "Write file could not be opened." << std::endl;
//std::cout << "argv[1] = " << argv[1] << " argv[2] = " << argv[2] << std::endl;
UnmapViewOfFile(pvreadFile);
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
writeFileMap = CreateFileMapping(writeFile, NULL, PAGE_READWRITE, 0, readFileSize, NULL);
//IF STATEMENT TO DETERMINE IF WRITE FILE MAP IS NULL
if(writeFileMap == NULL)
{
//DISPLAY ERROR MESSAGE THAT THE WRITE FILE CANNOT BE MAPPED
std::cout << "Write File could not be mapped." << std::endl;
CloseHandle(writeFile);
UnmapViewOfFile(pvreadFile);
CloseHandle(readFileMap);
CloseHandle(readFile);
return(FALSE);
}
pvwriteFile = MapViewOfFile(writeFileMap, FILE_MAP_WRITE, 0,0,0);
//IF STATEMENT IF THE PVWRITEFILE IS NULL
if(pvwriteFile == NULL)
{
//DISPLAY ERROR MESSAGE THAT I COULD NOT OPEN MAP VIEW OF WRITE FILE
std::cout << "Could not open map view of write file." << std::endl;
}
//POINTERS NEED TO BE CREATED
PSTR readptr = (PSTR) pvreadFile;
PSTR writeptr = (PSTR) pvwriteFile;
{
bool ret = isPalindrome( "eve redivider" );
}
//CLEANUP THE FILE
UnmapViewOfFile(pvwriteFile);
UnmapViewOfFile(pvreadFile);
CloseHandle(writeFileMap);
CloseHandle(readFileMap);
CloseHandle(writeFile);
CloseHandle(readFile);
}
if(argc>1)
{
// stuff I don't care about
}
//ELSE STATEMENT IF CANNOT FIND FILE
else
//DISPLAY ERROR MESSAGE THAT NO FILE IS Given
cout << "No file given" << endl << endl;
//RETURN A VALUE
return 0;
}
-
May 21st, 2011, 06:07 PM
#9
Re: Can someone please run this in XP
Originally Posted by jimJohnson123
is this what you are talking about...
That "stuff I don't care about" is what I wrote, because I really don't care about all of that code you posted. Again:
Code:
//VERIFYING ARGUMENTS
if(argc>1)
{
// this is all of your code, and I don't care what it does,
// so please don't post it as it has absolutelty nothing to do with your problem!
}
else
// cout an error saying you can't open the file.
That is a synopsis of the code you posted. So how does it get into the "else" portion? It doesn't matter what that code is that you posted does inside the if() block -- it has absolutely nothing to do with the issue, so it need not be posted over and over again. The only way it can get to that line is if argc <=1. So where does argc come from?
Code:
int main(int argc, char *argv[])
So why is argc <= 1? That is what I'm asking you. How did argc turn out to be <= 1 instead of > 1? Where does argc get its value? Something gave argc a value, so what is it? (I know what it is -- I'm asking if you know what it is that gives argc its value).
Regards,
Paul McKenzie
Last edited by Paul McKenzie; May 21st, 2011 at 06:11 PM.
-
May 21st, 2011, 06:16 PM
#10
Re: Can someone please run this in XP
That is a mixed salad of C++ carrots and Win32 apis potato chips. Anyway it works on my XP after some minor corrections
-
May 22nd, 2011, 12:47 PM
#11
Re: Can someone please run this in XP
aight thanks still tryin to figure it out but appreciate the help
-
May 22nd, 2011, 01:36 PM
#12
Re: Can someone please run this in XP
If the error message is "file not given", then you are not supplying
the file at the command prompt when you execute the program.
What are you typing to execute the code ?
Why bother with argc/argv ? Get the code working with a hard-wired
filename.
-
May 22nd, 2011, 02:04 PM
#13
Re: Can someone please run this in XP
I really am just going in with start without debugging in visual studio
-
May 22nd, 2011, 02:13 PM
#14
Re: Can someone please run this in XP
You must start debugging!
Victor Nijegorodov
-
May 22nd, 2011, 03:11 PM
#15
Re: Can someone please run this in XP
this is what it shows...
'Palindrome.exe': Loaded 'C:\Users\Bryan\Documents\CSI 345\Palindrome\Debug\Palindrome.exe', Symbols loaded.
'Palindrome.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'Palindrome.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Palindrome.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'Palindrome.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'Palindrome.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
The program '[6548] Palindrome.exe: Native' has exited with code 0 (0x0).
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|