Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cercare sottostringa in una stringa

16 views
Skip to first unread message

Bertram

unread,
May 15, 2013, 1:27:56 PM5/15/13
to


Mi sapete dire quale funzione Win32 utilizza Windows per cercare
una sottostringa in una stringa?
Che si possa utilizzare in un programma console scritto in C.


Gr�zie

Ciao


acc

unread,
May 15, 2013, 3:03:45 PM5/15/13
to
Nessuna, ma puoi usare quella del runtime:
http://msdn.microsoft.com/en-us/library/z9da80kz%28v=vs.80%29.aspx

Bertram

unread,
May 20, 2013, 6:25:02 AM5/20/13
to

"acc" <em...@farlocca.it> ha scritto nel messaggio
news:5193dc0e$0$37128$4faf...@reader1.news.tin.it...
Sai quale funzi�ne serve per invocare la finestra di SalvaFile, e quale
sotto funzione chiamare per inviare dalla clipboard il nome del file
alla casella di input della finestra SalvaFile? :-)


Ciao




Kan

unread,
May 20, 2013, 8:34:42 AM5/20/13
to
Il 20/05/2013 12:25, Bertram ha scritto:

Non c'entra niente con "Cercare sottostringa in una stringa", comunque...

> Sai quale funziᅵne serve per invocare la finestra di SalvaFile

GetSaveFileName

, e quale
> sotto funzione chiamare per inviare dalla clipboard il nome del file
> alla casella di input della finestra SalvaFile?:-)

FindWindow per prendere l'handle della finestra SalvaFile.
Per inviare i dati dalla clipboard, non sono sicuro, ma penso che
dovresti inviare alla finestra il messaggio WM_PASTE.

>
>
> Ciao


acc

unread,
May 20, 2013, 9:00:04 AM5/20/13
to
Il 20/05/2013 12.25, Bertram ha scritto:

> Sai quale funziᅵne serve per invocare la finestra di SalvaFile, e quale
> sotto funzione chiamare per inviare dalla clipboard il nome del file
> alla casella di input della finestra SalvaFile? :-)

Usare la clipboard non serve, puoi inserire il nome del file
direttamente nel campo lpstrFile della struttura OPENFILENAME, prima di
chiamare la GetSaveFileName().

Bertram

unread,
May 20, 2013, 4:01:49 PM5/20/13
to


Sto provando con questo codice:

BOOL WINAPI GetSaveFileNameA(LPOPENFILENAMEA);

OPENFILENAME ofn;
char FileName[1024];
HWND hwnd = NULL;
HANDLE hf;

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = FileName;

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = FileName;
ofn.nMaxFile = sizeof(FileName);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
if (GetSaveFileNameA(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);

ma compare questo errore:

(.text+0x183): undefined reference to `GetSaveFileName
A@4'
collect2: ld returned 1 exit status

Per aprire una finestra SalvaFile si deve utilizzare tutto questo codice?
:-)


Ciao




acc

unread,
May 20, 2013, 5:27:36 PM5/20/13
to
Sei sicuro di voler usare testo ANSI?
Io utilizzerei TCHAR e non farei riferimenti espliciti, basta sostituire
GetSaveFileNameA con GetSaveFileName (senza A finale), stesso discorso
per LPOPENFILENAMEA che diventera' LPOPENFILENAME.

Non devi dichiarare GetSaveFileNameA() (la prima riga non serve), e'
gia' dichiarata windows.h, all'inizio del sorgente metti:
#include <windows.h>
e sei a posto.

> Per aprire una finestra SalvaFile si deve utilizzare tutto questo codice?

In realta' e' solo una chiamata, tutto il resto serve solo a
parametrizzarla. Concordo sul fatto che sia macchinoso, ma questo rende
possibile configurare la chiamata per diverse esigenze, anche se a te
magari non interessa.

Se non ti interessa la retro-compatibilita' (win9x, 2k, XP) puoi usare
le nuove Common Item Dialog che funzionano da Vista in poi:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb776913%28v=vs.85%29.aspx

Bertram

unread,
May 21, 2013, 7:13:08 AM5/21/13
to
Ho fatto una cosa di questo tipo:

Compilatore MinGW.
#include <windows.h>
#include <Commdlg.h>

OPENFILENAME ofn;
char FileName[1024]="Ciao.txt";

ofn.lpstrFile = FileName;


GetOpenFileNameA(&ofn);

SearchFile.o:SearchFile.c:(.text+0x8a): undefined reference to
`GetOpenFileNameA
@4'
collect2: ld returned 1 exit status
GetOpenFileName

Ho tolto la A dal nome della funzi�ne:GetOpenFileName

ma compare lo stesso err�re.

SearchFile.o:SearchFile.c:(.text+0x8a): undefined reference to
`GetOpenFileNameA
@4'
collect2: ld returned 1 exit status


Ciao







Bertram

unread,
May 21, 2013, 8:06:13 AM5/21/13
to
Ho aggiunto sulla riga di comando del file.bat quando compilo:
-LC:\MinGW\mingw32\lib -lconio -LC:\MinGW\lib -lcomdlg32



conio lo avevo gi�, ma il secondo non funziona!



Ciao


acc

unread,
May 21, 2013, 9:01:12 AM5/21/13
to
Il 21/05/2013 13.13, Bertram ha scritto:

> Ho tolto la A dal nome della funziᅵne:GetOpenFileName
>
> ma compare lo stesso errᅵre.
>
> SearchFile.o:SearchFile.c:(.text+0x8a): undefined reference to
> `GetOpenFileNameA
> @4'
> collect2: ld returned 1 exit status

Se usi MinGW devi linkare la libreria libcomdlg32.a, da quanto leggo in
rete (io non uso MinGW) dovresti aggiungere -lcomdlg32 alla riga di comando.

Bertram

unread,
May 21, 2013, 1:21:04 PM5/21/13
to

"acc" <em...@farlocca.it> ha scritto nel messaggio
news:519b701a$0$1342$4faf...@reader2.news.tin.it...
> Il 21/05/2013 13.13, Bertram ha scritto:
>
>> Ho tolto la A dal nome della funzi�ne:GetOpenFileName
>>
>> ma compare lo stesso err�re.
>>
>> SearchFile.o:SearchFile.c:(.text+0x8a): undefined reference to
>> `GetOpenFileNameA
>> @4'
>> collect2: ld returned 1 exit status
>
> Se usi MinGW devi linkare la libreria libcomdlg32.a, da quanto leggo in
> rete (io non uso MinGW) dovresti aggiungere -lcomdlg32 alla riga di
> comando.

E quello che avevo fatto, ma compare questo errore.

G:\...\ SearchFile>REM -LC:\MinGW\lib -lcomdlg32 -lcomdlg32


G:\...\...\SearchFile>libcomdlg32.a
"libcomdlg32.a" non � riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.


Ciao


acc

unread,
May 21, 2013, 3:07:32 PM5/21/13
to
Il 21/05/2013 19.21, Bertram ha scritto:

> E quello che avevo fatto, ma compare questo errore.
>
> G:\...\ SearchFile>REM -LC:\MinGW\lib -lcomdlg32 -lcomdlg32

Questo non e' un errore, e' la riga di comando (sbagliata)
Nel batch di compilazione quella riga va tolta, REM sta per "commento"
quindi la shell non la interpreta, la mostra cosi' com'e'.

Il parametro -lcomdlg32 va messo sulla riga di comando del compilatore.

> G:\...\...\SearchFile>libcomdlg32.a
> "libcomdlg32.a" non ᅵ riconosciuto come comando interno o esterno,
> un programma eseguibile o un file batch.

Anche questa riga non serve, toglila.

PS: se vuoi tagliare la testa al toro, lascia perdere gcc/mingw e passa
a Visual C++, la versione Express e' gratuita, la trovi a questi indirizzi:

Link diretto al download di Visual Studio 2012 Express per Windows
Desktop - in Italiano:
http://go.microsoft.com/?linkid=9816771

Pagina dei prodotti Visual Studio 2012 Express:
http://www.microsoft.com/visualstudio/ita/downloads#d-express-windows-desktop

Bertram

unread,
May 21, 2013, 3:15:01 PM5/21/13
to


Ok, passer� a VisualC++


Ciao


Bertram

unread,
May 22, 2013, 7:35:40 AM5/22/13
to


Adesso funziona, sia con GetOpenFile che, GetSaveFileName.

Cio�, compare la finestra di OpenFile e SalvaFile con nome.
Ma il file non viene n� creato, n� salvato!

Ciao


Bertram

unread,
May 22, 2013, 7:39:45 AM5/22/13
to


Gli passo il nome del file, il cui nome compare nella casella di input,
la cartella dove salvarlo, ma non viene salvato il file.


Ciao


Kan

unread,
May 22, 2013, 7:57:01 AM5/22/13
to
GetSaveFileName non salva il file, ma serve solo per far apparire la
finestra di selezione del nome del file, cosᅵ che l'utente possa
scegliere il nome del file.
A questo punto, hai il nome del file e poi devi essere tu da programma a
salvarlo nel path di destinazione.
Da MSDN:
If the user specifies a file name and clicks the OK button and the
function is successful, the return value is nonzero. The buffer pointed
to by the lpstrFile member of the OPENFILENAME structure contains the
full path and file name specified by the user.


acc

unread,
May 22, 2013, 12:28:16 PM5/22/13
to
Il 22/05/2013 13.39, Bertram ha scritto:
> Gli passo il nome del file, il cui nome compare nella casella di input,
> la cartella dove salvarlo, ma non viene salvato il file.

Al link che segue trovi un tutorial che fa al caso tuo, e' un esempio di
come leggere/scrivere file di testo, utilizzando le funzioni dei Common
Dialogs per scegliere il file:
http://www.winprog.org/tutorial/app_two.html

NB: il tutorial riporta *solo* un riassunto del programma, se vuoi
scaricare l'esempio completo vai alla home page
(http://www.winprog.org/tutorial/) e li' trovi il link (il primo
dall'alto), il file zip contiene i sorgenti di tutti gli esempi del
sito, quello che ti interessa e' nella cartella app_two. ;-)
0 new messages