problem z upuszcaniem plików

0

witam,
mam problem z otwieraniem programu poprzez upuszczanie plików. Program ma za zadanie otworzyć pewien plik w którym znajdują się dane liczbowe, zrobić na nich odpowiednie obliczenia i zapisać je w oddzielnym pliku tekstowym. Program działa doskonale gdy uruchomię go po przez normalne kliknięcie w .exe, ale wtedy muszę w programie pytać użytkownika o podanie ścieżki do pliku, co mija się z celem bo program ma służyć do otwierania dużej ilości plików. Działa również gdy uruchamiam go z linii komend dając drugi argument jako plik z którego ma czerpać dane. Działa również gdy plik z danymi otwieram funkcją "otwórz za pomocą.." i wybieram mój program. Problem pojawia się gdy chcę upuścić plik z danymi na mój program. Wtedy wypisuje mi w konsoli wszystkie obliczenia poprawnie, więc działa, ale nie wypluwa mi pliku z zapisanymi danymi.

W skrócie problem polega na tym czym różni się otwieranie programu z linii komend gdzie jako drugi argument idzie plik z danymi, od otwierania go za pomocą przeciągnięcia i upuszczenia?

0

Zasadnicze pytanie jest takie, gdzie ci ten wynik ma "wypluwać" i jak to określasz.

0

ma mi go wypluwać do pliku .txt, plik otwieram przez funkcję fopen z argumentem "w", a zapis danych jest przez funkcję fprintf.

0

Drag-Drop wielu plików odpala tyle instancji programu ile jest plików, dlatego pewnie gdy jedna instancja zapisuje wynik, inna nie jest w stanie tego poprawnie zrobić bo np. plik jest zablokowany, lub dane w nim są wielokrotnie nadpisywane. Użyj mutexu zanim otworzysz plik do zapisu, wtedy inne instancje programu zaczekają na prawo do zapisu.

mutex = CreateMutex(0, TRUE, "ZapisDoPlikuBlah.db");
// czekaj na wyłączność
if (GetLastError() == ERROR_ALREADY_EXISTS) WaitForSingleObject(mutex, INFINITE);
// zapisz wynik do pliku
fopen/fwrite/fclose
ReleaseMutex(mutex);
CloseHandle(mutex);

Albo chociaż wsadź fopen w pętlę która będzie próbowała tak długo, aż się uda otworzyć plik do zapisu.

0

hmmm, dziwne, sprawdziłem czy w ogóle otwiera się plik do zapisu, no i się otwiera. Przy wcześniejszych próbach robienia czegoś, jak się udało otworzyć plik do zapisu, a były złe komendy i się program wykrzaczał to mimo wszytko plik do zapisu się otwrzył. Był pusty, ale był. Wydawało się że jeżeli zadziała komenda fopen, to ten plik po prostu musi się już otworzyć :/ nie zależnie od tego co chcemy w nim zrobic i jak.

znalazłem odpowiedź na swój problem. Plik się tworzy i zapisuje, tylko nie domślnie w folderze roboczym, tylko gdzieś na dysku C w dokumentach, niewiedizeć czemu.

0

nie "gdzieś na c w dokumentach", tylko w %homepath% - czyli ogólnie w:
C:\Documents and Settings\nazwa użytkownika

zapisuje się tam nie "nie wiedzieć czemu", tylko dlatemu, że:

program uruchamiany z Drag&Drop ma katalog roboczy ustawiany na katalog domowy użytkownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1