Need a suggestion in searching a file
-
Sir, I have coded a program to get a string form a file and compare the string present in the file and which I have defined in my program. I am using
FILE *opn = fopen("C:\\test.txt","r");
to achieve this and "strcmp" to compare the strings. I need a suggestion for implementing my code to get the strings of all files present in my computer and comparing with the string which I have defined in the program so that I can find the presence of that file in my computer. Kindly help me.
You can use the FindFirstFile function[^] to start a search for files in a directory tree. As you get each file's name you can then read its contents and search for the text. Do not be surprised if it takes a lot of time. You can also read some of the suggestions that Google finds[^].
-
You can use the FindFirstFile function[^] to start a search for files in a directory tree. As you get each file's name you can then read its contents and search for the text. Do not be surprised if it takes a lot of time. You can also read some of the suggestions that Google finds[^].
Sorry Sir, I think I have not explained my question correctly.I am looking for function which gets the string(will be equal irrespective of the file size) of all files present in the computer and compares with the string which I have defined in my program.More precisely I am looking for a program which searches for the "strings" irrespective of their names.
-
Sorry Sir, I think I have not explained my question correctly.I am looking for function which gets the string(will be equal irrespective of the file size) of all files present in the computer and compares with the string which I have defined in my program.More precisely I am looking for a program which searches for the "strings" irrespective of their names.
-
Yes I understand your question. And the way to do it, is to get the list of all files in your target set, and then read each file in turn in order to find the string. You can use some the strXXX functions[^] to speed up the searching.
Sir, What if I do if I run the executable on another computer.I have only "C:\\ and D:\\" drives if I run the executable on another computer which has "C:\\ D:\\ E:\\ " drives my code ultimately fails :( .How can I get the list of all files on the computer on which my executable runs.I sincerely thank you for giving me the excellent link for speed up my searching.
-
Sir, What if I do if I run the executable on another computer.I have only "C:\\ and D:\\" drives if I run the executable on another computer which has "C:\\ D:\\ E:\\ " drives my code ultimately fails :( .How can I get the list of all files on the computer on which my executable runs.I sincerely thank you for giving me the excellent link for speed up my searching.
-
You really need to learn how to do some more research for yourself. How do you get a list of all the drives? Type "Windows list drives C++" into Google and start reading.
-
Sir, What if I do if I run the executable on another computer.I have only "C:\\ and D:\\" drives if I run the executable on another computer which has "C:\\ D:\\ E:\\ " drives my code ultimately fails :( .How can I get the list of all files on the computer on which my executable runs.I sincerely thank you for giving me the excellent link for speed up my searching.
Are you referring to GetLogicalDrives() or GetLogicalDriveStrings()?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
-
Are you referring to GetLogicalDrives() or GetLogicalDriveStrings()?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
-
Thank you Sir for your kind help. Can you please suggest me some links related to this? I am searching in google for something related to this(like getting the strings form an executable) but I cannot find one.
-
Why do you keep asking this? I have explained what you need to do to find strings in a file, it's now time to go and try it.
Sir, I have tried a lot and finally figured out something. It is by searching for a specific file with MD5 hashes. Since, I want to search for a specific file through the whole drive. Here is my try
inline std::string narrow(std::wstring const& text)
{
std::locale const loc("");
wchar_t const* from = text.c_str();
std::size_t const len = text.size();
std::vector buffer(len + 1);
std::use_facet >(loc).narrow(from, from + len, '_', &buffer[0]);
return std::string(&buffer[0], &buffer[len]);
}void _tmain(int argc, TCHAR *argv[])
{HANDLE hFind; WIN32\_FIND\_DATA data; std::string path = "C:\\\\"; std::string fileName = ""; wchar\_t\* file = L"C:\\\\\*"; hFind = FindFirstFile(file, &data); if (hFind != INVALID\_HANDLE\_VALUE) { do { fileName = narrow(data.cFileName); if (fileName.compare(".") == 0) continue; if (fileName.compare("..") == 0) continue; cout << "FileName: " << fileName << " MD5 hash: "; // prepare filename std::string finalFile = path + fileName; char \*cstr = new char\[finalFile.length() + 1\]; strcpy(cstr, finalFile.c\_str()); //calc the md5 hash char \*\*temp = CALL\_MD5\_Function(cstr); cout << temp; cout <
I don't know how to iterate if I found a directory, in here
if (fileName.compare(".") == 0)
continue;
if (fileName.compare("..") == 0)
continue;I used continue statement to break the skip the operation since I am unsure. Could you please suggest me some ways to do it?
Thank you sir for your kind help
-
Sir, I have tried a lot and finally figured out something. It is by searching for a specific file with MD5 hashes. Since, I want to search for a specific file through the whole drive. Here is my try
inline std::string narrow(std::wstring const& text)
{
std::locale const loc("");
wchar_t const* from = text.c_str();
std::size_t const len = text.size();
std::vector buffer(len + 1);
std::use_facet >(loc).narrow(from, from + len, '_', &buffer[0]);
return std::string(&buffer[0], &buffer[len]);
}void _tmain(int argc, TCHAR *argv[])
{HANDLE hFind; WIN32\_FIND\_DATA data; std::string path = "C:\\\\"; std::string fileName = ""; wchar\_t\* file = L"C:\\\\\*"; hFind = FindFirstFile(file, &data); if (hFind != INVALID\_HANDLE\_VALUE) { do { fileName = narrow(data.cFileName); if (fileName.compare(".") == 0) continue; if (fileName.compare("..") == 0) continue; cout << "FileName: " << fileName << " MD5 hash: "; // prepare filename std::string finalFile = path + fileName; char \*cstr = new char\[finalFile.length() + 1\]; strcpy(cstr, finalFile.c\_str()); //calc the md5 hash char \*\*temp = CALL\_MD5\_Function(cstr); cout << temp; cout <
I don't know how to iterate if I found a directory, in here
if (fileName.compare(".") == 0)
continue;
if (fileName.compare("..") == 0)
continue;I used continue statement to break the skip the operation since I am unsure. Could you please suggest me some ways to do it?
Thank you sir for your kind help
You should move your find processing to a separate function and call that with the root path you wish to search. You can then call that recursively each time you find a directory, something like:
void ProcessFiles(string root, string directory)
{
string searchPath = // root plus directory plus mask
// start the find loop
// if next filename = "." or ".." continue
// if next entry is a directory
// ProcessFiles(searchPath, directory.name);
// ...
}
int main()
{
ProcessFiles("C:\\", NULL);
} -
You should move your find processing to a separate function and call that with the root path you wish to search. You can then call that recursively each time you find a directory, something like:
void ProcessFiles(string root, string directory)
{
string searchPath = // root plus directory plus mask
// start the find loop
// if next filename = "." or ".." continue
// if next entry is a directory
// ProcessFiles(searchPath, directory.name);
// ...
}
int main()
{
ProcessFiles("C:\\", NULL);
}