Java Zugriff gewähren auf Windows 10 Special Folders

Ich ärgere mich gerade, denn ich bekomme immer eine IOException (Zugriff verweigert), wenn ich eine Spielstanddatei in …\Saved Games\… nur lesen möchte.

Auch beim Herauskopieren des Ordners/der Datei nach dem Desktop funktioniert das nicht (~ diese sind dann auch mit irgendeinem “Schutzmechanismus” belegt).

Ich hab dazu im Internet nichts gefunden.

Administrator rights alles versucht.

Bei mir darf seltsamerweise ein .jar keine Administratorrechte (mehr) erlangen.

So, ich hab mir anders mit einem C++-Programm, das die Spielstanddateien kopiert, beholfen. Das starte ich dann in Java aus. Ist das so richtig?

Im Manifest steht: requireAdministrator (/level='requireAdministrator')!

// ConsoleApplication1.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"

using namespace std;

int main()
{
	int indexoffile = 1;
	string topath = "C:\\Users\\ ... \\Desktop\\ ... ";
	wstring wtopath = wstring(topath.begin(), topath.end());
	string frompath = "C:\\Users\\ ... \\Saved Games\\ ... \\ ... ";
	wstring wfrompath = wstring(frompath.begin(), frompath.end());
	string dirname = frompath + "\\*";
	wstring wdirname = wstring(dirname.begin(), dirname.end());
	LPCWSTR lwdirname = wdirname.c_str();
	WIN32_FIND_DATA fd;
	HANDLE hFind = INVALID_HANDLE_VALUE;
	DWORD dwAttrs;
	_tprintf(TEXT("%s\n"), lwdirname);
	hFind = FindFirstFile(lwdirname, &fd);
	if (INVALID_HANDLE_VALUE == hFind) {
		_tprintf(TEXT("INVALID_HANDLE_VALUE == hFind\n"), lwdirname);

	}
	do {
		if (fd.dwFileAttributes == 8224) {
			dwAttrs = GetFileAttributes(fd.cFileName);
			_tprintf(TEXT("%s %s %s\n"), fd.cFileName, to_wstring(fd.dwFileAttributes).c_str(), to_wstring(dwAttrs).c_str());

			wstring wfilename1 = fd.cFileName;
			// wstring wfilename2 = wfilename1.substr(0, wfilename1.find_last_of('.'));
			// _tprintf(TEXT("%s\n"), wfilename2.c_str());
			wostringstream ss;
			ss << wtopath << "\\";
			ss << setw(3) << setfill(L'0') << indexoffile++;
			ss << "_" << wfilename1;
			wstring wtofilename = ss.str();
			_tprintf(TEXT("%s\n"), wtofilename.c_str());

			ss = wostringstream();
			ss << wfrompath << "\\" << fd.cFileName;
			wstring wfromfilename = ss.str();
			_tprintf(TEXT("%s\n"), wfromfilename.c_str());

			ofstream ofs;
			ofs.open(wtofilename);
			ifstream ifs;
			ifs.open(wfromfilename);
			if (!ifs.bad()) {
				ofs << ifs.rdbuf();
				ifs.close();
			}
			ofs.close();
		}
	} while (FindNextFile(hFind, &fd) != 0);
	FindClose(hFind);
	system("PAUSE");
	return 0;
}

(Das L'0' ist für discourse zu viel des Guten. :smiley: )

Alle Spielstanddateien habn das Dateiattribut: 8224 bzw 4294967295,
was auch immer das bedeuten soll. :sweat:

Thema ist erst mal solved.

Wieso funktioniert das nicht?, er wartet nicht bis die .exe fertig ist:

Process proc = Runtime.getRuntime().exec("cmd /c start C:\\Users\\Tobias\\source\\repos\\ConsoleApplication1\\Release\\ConsoleApplication1.exe");
proc.waitFor();
// Thread.sleep(2500);