2

removeの関数を使用してファイルを削除するC++ライブラリを作成しましたVisual C++ 2005。ただし、ファイルは削除されません。この問題を解決するにはどうすればよいですか?

サンプルコードを以下に示します。

FILE *fp;
char temp[10000];
char *filename;

GetCurrentDirectoryA(10000,temp);
strcat(temp,"\\temp.png");

filename = (char*)malloc(sizeof(char)*strlen(temp));
memset(filename,'\0',strlen(temp));
strcpy(filename,temp);

if(png == NULL)
    return LS_ARGUMENT_NULL;

fp = fopen(filename,"wb");
fwrite(png,sizeof(unsigned char),pngLength,fp);
fclose(fp);

result = remove(filename);
4

3 に答える 3

2

他の部分を無視して、もう1文字割り当てる必要があると思います。

filename = (char*)malloc(strlen(temp)+1); // I added a +1 for last '\0'
// memset(filename,'\0',strlen(temp));    // You dont need this
strcpy(filename, temp);

現在のディレクトリからファイルを削除する必要がある場合は、名前だけで十分です。

remove("temp.png");

GetCurrentDirectoryAそれらと関連するコードを取り除きます。

于 2013-03-14T09:58:20.080 に答える
2

1)char * strcat(char * destination、const char * source); 文字列の連結ソース文字列のコピーを宛先文字列に追加します。宛先の終了ヌル文字はソースの最初の文字で上書きされ、宛先の両方の連結によって形成された新しい文字列の最後にヌル文字が含まれます。

したがって、NULL\0文字を追加する必要はありません

2)削除を機能させるには、ファイル権限が必要です。確認してください。

3)strerror(errno)を使用してエラーをチェックし、エラーを出力します

また、fopenが成功した場合、urコードはチェックされないようです。

if( remove( "myfile.txt" ) != 0 )
perror( "Error deleting file" );
 else
puts( "File successfully deleted" );
return 0;
于 2013-03-14T10:04:11.463 に答える
0

を使用するだけでウィンドウを作成しても意味がありませんGetCurrentDirectory

派手なクロスプラットフォームバージョンは次のとおりです。

#include <iostream>
#include <fstream>

int main()
{
    char file[1024];
    char buffer[2048];

    // Get file name.
    std::cout << "Enter name of file to create: ";
    std::cin >> file;

    // Append .txt to file.
    sprintf(file, "%s.txt", file);

    // Create it.
    std::cout << "* Creating file: " << file << std::endl;
    std::ofstream out(file);

    // Write in it.
    std::cout << "Write in the file: (CTRL+Z to stop)" << std::endl;
    while (std::cin >> buffer)
    {
        out << buffer << std::endl;
    }

    // Close it.
    out.close();

    // Delete it.
    std::cout << "* Deleting file: " << file << std::endl;
    if (remove(file) != 0) std::cerr << "* Couldn't remove the file. Does the program have the required permissions?" << std::endl;
}
于 2013-03-14T10:16:02.577 に答える