我有一個C++ Win32
程序,我在其中編寫和閱讀文本文件。這個C++程序生成一個DLL,我在我的ASP.NET Web應用程序中引用這個DLL。
使用P/Invoke,我調用讀取和寫入該dll文件的方法。ASP.NET中的P/Invoke(從dll讀取/寫入文本文件)
當我用WPF應用程序中的P/invoke測試了這個DLL時,dll工作正常。 參考dll位於此WPF應用程序的bin/Debug
文件夾中,並且在調用dll時,寫入方法在同一文件夾中生成文本文件。 此外,from the same folder
,我可以使用dll的讀取方法來讀取文本文件。
但是,當我從我的ASP.NET Web應用程序調用Dll方法時,生成的文件會轉到其他目錄(很可能是因爲dll被加載到其他地方執行),我無法找到這個位置生成的文件去(沒有任何錯誤)
與桌面應用程序類似,是否有某種方式,fie將被寫入bin文件夾本身,以便我可以從bin文件夾本身讀取?
示例代碼:
cpp文件
extern "C" D_API int Write1()
{
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 1;
}
extern "C" D_API char* Read1()
{
ifstream myReadFile;
myReadFile.open("test.txt");
char output[100];
if (myReadFile.is_open())
{
while (!myReadFile.eof())
{
myReadFile >> output;
}
}
return output;
}
C#.aspx.cs
[DllImport("Testing1.dll", EntryPoint = "fnTest", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int Write1();
[DllImport("Testing1.dll", EntryPoint = "ReadTest", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern StringBuilder Read1();
..和使用默認的工作目錄也可以有權限的問題 - 例如,你可以結束一個IIS進程無法寫入的目錄。 – MiMo 2012-04-25 11:10:11
@MMo的確如此,但事實並非你想要的文件是真正的殺手。 – 2012-04-25 11:14:09
當然 - 我只是增加了一個理由,爲什麼最好避免使用當前工作目錄。 – MiMo 2012-04-25 11:17:23